变量作用域
多函数程序执行流程
函数的返回值
函数的参数
拆包和交换两个变量的值
引用
可变和不可变类型
一、变量的作用域
局部变量和全局变量
局部变量:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量
def test1():
a = 100
print(a)
test1()
全局变量:指的是在函数内,外都能生效的变量
a = 100
print(a)
def test1():
print(a)
def test2():
print(a)
test1()
test2()
修改全局变量,使用global声明这个变量是全局的,然后再取修改
a = 100
print(a)
def test1():
print(a)
def test2():
# a = 200 # 修改的a是局部变量,因为再函数调用后又打印了一次a,发现还是100,说明全局变量没有变
# 使用关键字声明这个变量是全局的
global a
a =200
print(a)
test1()
test2()
print(a)
# 输出
# 100
# 100
# 200
# 200
二、多函数程序执行流程
number = 0
def test1():
global number
number = 100
def test2():
print(number)
test1()
test2()
三、函数的返回值
3.1函数的返回值可以作为另外一个函数的入参
def test1():
return 40
result = test1()
def test2(num):
print(num)
test2(result)
3.2 一个函数返回多个返回值的写法,可以是元组、列表、字典
return a, b
返回的是一个元组
def nums():
# return 1, 3
# return (1, 3)
# return [1, 3]
return {'name':'test', 'age':23}
res = nums()
print(res)
# 输出(1, 3)
# 返回的是一个元组
# 输出[1, 3]
# 输出 {'name':'test', 'age':23}
# 当返回的多个数据是 元组,返回的也是元组,当多个数据是列表,返回的还是列表,是字典的时候,返回的是字典
四、函数的参数
4.1位置参数:调用函数时根据函数定义的参数位置来传递参数
def user(name, age, gender):
print(f'名字是{name},年龄是{age},性别是{gender}')
user('test1', 20, '男')
# 输出名字是test1,年龄是20,性别是男
注意:传递和定义参数的顺序及个数必须一致
4.2关键字参数
函数调用,是通过“键”=“值”的形式加以指定的,关键字参数之间不存在位置先后顺序。
def user_info(name, age, gender):
print(f'姓名是{name},年龄是{age},性别是{gender}')
user_info(age=20, gender='男', name='test1')
# 输出姓名是test1,年龄是20,性别是男
用关键字参数的时候,关键字参数先后顺序可以不一致
4.3缺省参数
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值,所有位置参数必须出现在默认参数前,包括函数定义和调用
def user_info(name, age, gender='男'):
print(f'姓名是{name}, 年龄是{age}, 性别是{gender}')
# user_info('test', 23)
# 输出 姓名是test, 年龄是23, 性别是男
user_info('test1', 44, gender='女')
# 输出 姓名是test1, 年龄是44, 性别是女
4.4不定长参数
用于不确定调用的时候会传递多少个参数(不传参也可以),可以用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递。
包裹位置传递,所有传进的数据都被args收集,然后返回一个元组
def user_info(*args):
print(args)
user_info('test1', 20)
user_info('test2')
user_info()
# 输出
# ('test1', 20)
# ('test2',)
# ()
包裹关键字传递,当用关键字传递数据,但是不确定个数的时候,可以使用**kwargs,返回的是字典
def user_info(**kwargs):
print(kwargs)
user_info(name='test1', age=23, gender='男')
# 输出{'name': 'test1', 'age': 23, 'gender': '男'}
无论是包裹位置传递,还是包裹关键字传递,都是组包的过程
五、拆包和交换两个变量的值
5.1拆包
拆包:元组,返回两个值,用两个变量分别接收
def num():
return 100, 200
res_num1, res_num2 = num()
print(res_num1)
print(res_num2)
拆包:字典,字典拆包,拆后得到的是key值,然后通过key值,获取value
dict1 = {'name': 'test', 'age': 23, 'gender': '男'}
# 用字典拆包,拆后得到的都是key的值,然后通过key的值,获取value
a, b, c = dict1
print(a)
print(b)
print(c)
print(dict1[a])
print(dict1[b])
print(dict1[c])
5.2交换变量
方法一,借助中间变量
def num():
a = 10
b = 20
c = 0
c = a
a = b
b = c
print(a)
print(b)
num()
方法二
# 方法二
a, b = 1, 2
a, b = b, a
print(a)
print(b)
六、引用
在python中,数据的传递是通过引用传递的,简单理解引用可以当做一个变量名,可以作为实参传递
七、可变和不可变类型
所谓可变类型与不可变类型是指:数据能够直接进行修改,是否修改的是原数据,如果能直接修改那么就是可变,否则就是不可变的
可变类型:
列表
字典
集合
不可变类型:
整型
浮点型
字符串
元组
八、总结:
1、变量作用域
全局:函数体内外都能生效, global
局部:函数内部生效
2、函数多返回值写法
return 表达式1, 表达式2
3、函数的参数
位置参数 :形参和实参的个数与书写顺序必须保持一致
关键字参数: 写法 key =value,形参和实参的书写顺序可以不一致
缺省参数:缺省参数就是默认参数 ,写法key = value
不定长位置参数:收集所有位置参数,返回一个元组,用*args
不定长关键字参数:收集所有关键字参数,返回的是一个字典 ,用**kwargs接收
4、引用:python中,数据的传递是通过引用传递的