变量作用域
变量作用域指的是变量生效的范围,主要分:局部变量和
全局变量
修改全局变量
返回值作为参数传递
def test1():
return 1027
def test2(num):
print(num)
res = test1()
test2(res)
输出:1027
一个函数多个返回值
def return_num():
return 1, 2
res = return_num()
print(res)
输出:(1, 2)
def return_num():
return [10, 20]
res = return_num()
print(res)
输出:[10, 20]
注意:
1、return a,b写法,返回多个数据的时候默认是元祖类型
2、return后面可以连接列表,元祖或字典,以返回多个值
函数的参数
位置参数
位置参数:调用函数时根据函数定义的参数位置来传递参数
def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('来福', 1.2, '男')
输出:您的名字是来福, 年龄是1.2, 性别是男
注意: 传递和定义参数的顺序及个数必须一致
关键字参数
函数调用,通过“键=值”形式加以指定。清除了参数的顺序需求
def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('来福', gender='男', age=1.2)
输出:您的名字是来福, 年龄是1.2, 性别是男
注意: 函数调用时如果有位置参数,位置参数必须在关键字参数前面,但关键字参数之间不存在先后顺序
缺省参数
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值
注意:所有位置参数必须出现在默认参数前,包括函数定义和调用
def user_info(name, age, gender='男'):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('来福', 1.2)
user_info('来福', gender='公', age=1.2)
输出:
您的名字是来福, 年龄是1.2, 性别是男
您的名字是来福, 年龄是1.2, 性别是公
注意: 函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值
不定长参数
不定长参数也叫可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。此时,可用包裹(packing)位置参数,或者包裹关键字参数来进行参数传递,会很方便
包裹位置传递
def user_info(*args):
print(args)
user_info('Laifu')
user_info('Laifu', 1.1)
user_info('Laifu', 1.1,'男')
输出:
('Laifu',)
('Laifu', 1.1)
('Laifu', 1.1, '男')
注意: 传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元祖(tuple),args是元祖类型
包裹关键字传递
def user_info(**args):
print(args)
user_info(name = 'Laifu', age = 1.1, id = 1, gender = '男')
输出:{'name': 'Laifu', 'age': 1.1, 'id': 1, 'gender': '男'}
拆包
元祖拆包
def return_num():
return 100, 200
num1, num2 = return_num()
print(num1)
print(num2)
输出:
100
200
字典拆包
交换变量值
方法一
a = 10
b = 20
c = 0
c = a
a = b
b = c
print(a)
print(b)
输出:
20
10
方法二:
a, b = 1, 2
a, b = b, a
print(a)
print(b)
输出:
2
1