python中的函数进阶

1.局部变量和全局变量

在函数外定义的不可变数据类型,在函数里面是可读不可写
在函数外定义的可变数据类型,在函数里面可读可操作不可修改
不可变类型传入函数,进行的操作不会影响到外面的变量
但是当我们声明一个变量为全局变量后,进行的操作会影响到函数外的变量

可变数据类型,传入和直接使用都会改变原本的数据
不可变数据类型 直接使用是可读不可写的
传入后的操作不会对函数外的变量造成影响
声明为全局变量后,可读可写,并且会对函数外的变量造成影响


# 1.在函数外定义的不可变数据类型
# 在函数里面是可读不可写
b = 1


def func():
    print(b)  # 可以运行成功

    # b += 1  # 报错
    # print(b)


func()

python中的函数进阶

 

 

# 2.不可变类型传入函数,进行的操作不会影响到外面的变量
# 但是参数可以传进来
b = 1


def func(b):
    b += 1
    print(b)


func(b)  # 2
print(b)  # 1

python中的函数进阶

 

 

# 3.在函数外定义的可变数据类型
# 在函数里面可读可写
l1 = [1, 2, 3]


def func():
    l1.append(6)
    print(l1)


func()

python中的函数进阶

 

 

# # 4.global
# # 只能在一个局部的情况下使用
# # 当一个函数外的不可变数据类型在函数内读和写并对原本的变量修改时,用global声明
b = 1


def func():
    # global 声明一个变量为全局变量
    global b
    b += 1
    print(b)


func()  # 2
# 但是当我们声明一个变量为全局变量后,进行的操作会影响到函数外的变量
print(b)  # 2

python中的函数进阶

 

 

# 例子
my_money = 10000


def add(money: int):  # 形参money
    """奖金加钱"""
    global my_money
    my_money += money
    print(f'当前余额{my_money}')


def reduce(money: int):  # 形参money
    """罚款减钱"""
    global my_money  # 注意这里也要声明!!!
    my_money -= money
    print(f'当前余额{my_money}')


add(1000)  # 实参1000
add(2000)
reduce(4000)
reduce(666)

python中的函数进阶

 

 

2.函数传参

# 1.形参与实参
# 形参和实参的个数需要一样
# 实参形参的位置顺序必须一样
def func(name, age):  # 形参
    print(f'我的名字是{name},我的年龄是{age}')


my_name = '小明'
my_age = 20
func(my_name, my_age)  # 实参

python中的函数进阶

 

 

# 2.关键字参数
# 关键字传参 关键字不需要加引号
# 优点:可以打乱参数的传入顺序
# 需要注意:关键字参数一定全都要写到最后面
# 不过一般是如果写关键字就都写关键字了
def func(money, name, age):  # 形参
    print(f'我的名字是{name},我的年龄是{age}n'
          f'我的钱是{money}')


my_name = '小明'
my_age = 20
func(100, age=my_age, name=my_name)  # 实参

python中的函数进阶

 

 

# 3.默认参数
# 可写可不写
# 不写则使用默认参数
# 写了则使用传入的参数
# 默认参数一定要写在最后,否则报错
def func(name, age, money=1000, gender=''):  # 默认参数gender

    print(f'我的名字是{name},我的年龄是{age}n'
          f'我的钱{money},我的性别{gender}')


my_name = '小明'
my_age = 20
func(my_name, my_age, 100, '')  # 实参

python中的函数进阶

 

 

# 4.不定长参数 不定长关键字参数
# *args 也可以是*a *xxx
# **kwargs 也可以是**a **xxx
# key word args
# 加了一个星号 * 不定长参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
# 加了两个星号 ** 的参数会以字典的形式导入,存放已命名的变量参数。
def func(name, *args):
    print(args)  # 是元组
    print(*args)  # 包本身  一般不会使用*args而使用args
    print(f'{name}菜里面的调料有{args}')


func('小明', '番茄酱', '辣椒粉', '孜然粉')


def func1(name, **kwargs):
    print(kwargs)
    # print(**kwargs)  # 报错
    print(f'{name}菜里面的调料有{kwargs}')


func1('小明', t1='番茄酱', t2='辣椒粉', t3='孜然粉')

python中的函数进阶

 

 

今日作业

# 定义一个模拟ATM机操作的场景
# 1)需要一个存钱和取钱的函数
# 2)设置全局默认资金1000
# 3)调用存钱函数,存放800元,并将操作后函数将余额打印出米(1000+800= 1800)
# 4)调用取钱函数,取钱500元,并将操作后函数将余额打印出来(1800-500=1300)
money = 1000


def add_money(money1: int):
    """存钱函数"""
    global money  # 声明money为全局变量
    money += money1
    print(f'余额是{money}')


def reduce_money(money2: int):
    global money  # 注意这里也要声明!!!
    money -= money2
    print(f'余额是{money}')


add_money(800)  # 调用存钱函数,存放800元
reduce_money(500)  # 调用取钱函数,取钱500元

python中的函数进阶

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中的函数进阶 - Python技术站

(0)
上一篇 2023年4月2日 下午4:18
下一篇 2023年4月2日 下午4:18

相关文章

  • python中的高阶函数

    1.匿名函数 # lambda表达式 # 匿名函数 # 没有名字的函数 相当于 # 优点:节省内存空间 优化代码 # def add(a, b): # return a+b def add(a, b): return a + b # 当函数里面的代码只有一行的时候可以这样写! print(add(1, 2)) # 但函数里面的代码只有一行,可以转换为匿名函数…

    2023年4月2日
    00
  • python函数入门

    1.函数的作用 # sum() max() min() len() type() # 使用函数都需要加一个括号 # 有自己的功能 # ‘a’.replace() # 称为方法 点出来的有括号的称为方法 # a.name # 称为属性 # sum() # 是函数 # 不加括号时,sum代表的是整个函数 # 加了括号时,sum()代表的是使用函数 # 1.函数的…

    2023年4月2日
    00
  • python中的字符串操作

    # 1.索引(下标) print(‘1.索引’) str_data = ‘Python’ # [索引(下标)]取索引的格式 # 正负索引 # 获取单个数据 sub_str = str_data[4] print(sub_str) sub_str = str_data[-2] print(sub_str)     # 2.字符串切片 # 取单个数据用索引 # …

    2023年4月2日
    00
  • python函数进阶

    # 1.函数的作用域 # 全局变量的作用域: # 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。 # 全局变量所有作用域都可用,局部变量只能在本函数可用,变 # 量的使用顺序是,局部变量 > 全局变量, 也就是说:优先使用局部变量 # # global关键字: # 为了解决函数内使用全局变量的问题, # python增加了gl…

    2023年4月2日
    00
  • python中的高阶函数

    1.匿名函数 # 1.匿名函数lambda # 简化代码 减少占用的内存 print(‘1.匿名函数lambda’) def func(): print(10) func() func = lambda: print(10) # 出现警告的原因是: # 因为你把lambda表达式赋给了另一个变量。 # 但lambda表达式本就是一个匿名的函数, # PEP8…

    2023年4月2日
    00
  • python中的列表和元组

    # 1.列表的格式 # [数据1,数据2,数据3,···] # 列表 可变数据类型 # 列表可以存储多个数据,数据之间的逗号以英文逗号分隔 # 列表可以存储不同类型数据,但一般存储同一数据类型,这样便于操作 # list_name = [] # 定义了一个空的列表 # 定义了一个有数据的列表 # 可以去索引和切片 print(‘1.列表的格式’) list_…

    2023年4月2日
    00
  • python中的公共操作和推导式

    # 1.公共操作 # del 删除 删除变量或指定容器内数据 变量,容器里面的值 # + 将两个相同类型序列进行连接 字符串,列表,元组 print(‘1.公共操作’) print(‘a’ + ‘b’) print([‘a’] + [‘b’]) print((‘a’,)+(‘b’,)) # 元组,要有, # print({1:2}+{2:3}) # 字典不行…

    2023年4月2日
    00
  • python中的for循环

    1.range # 1.range(起始值,结束值,步长) # 范围 区间 # 步长不写时默认是1 # 当里面只有一个数据的时候,默认是0-结束值 # 当里面有两个数据的时候,是 起始值-结束值 print(‘1.range()’) print(range(5, 9, 1)) print(type(range(9)))       2. for循环 # 2.…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部