目录
一、变量作用域
变量作用域指的是变量生效的范围,主要分为两类:局部变量和全局变量
1. 局部变量
局部变量:定义再函数体内部的变量,即只在函数体内部生效,在函数外部访问则报错。
局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。
def testA():
a = 100
print(a)
testA() # 100
print(a) # 报错
2. 全局变量
全局变量:指的是在函数体内、外都能生效的变量。
# 定义全局变量a
a = 100
def testA():
print(a)
def testB():
print(a)
testA() # 100
testB() # 100
print(a) # 100
二、多函数的程序执行流程
一个程序往往由多个函数组成,并且多个函数共享某些数据。
- 共用全局变量
def test1():
# 声明a为全局变量
global a
a = 200
print(a)
def test2():
print(a)
test1() # 200
test2() # 200
- 返回值作为参数传递
def test1():
return 100
def test2(num):
print(num)
# 将test1的返回值保存在变量result中
result = test1()
# 将test1的返回值(变量result)作为test2的参数传递
test2(result)
三、函数的多返回值
思考:如果一个函数有多个返回值,该如何书写呢?
def test():
return 100,200
result = test()
print(result) # (100, 200) --默认返回一个元组
注意:return a,b的写法,返回多个数据的时候,默认是元组类型。
四、函数的参数
1. 位置参数
位置参数:调用函数时,根据函数定义的参数位置来传递参数。传递和定义参数的顺序及个数必须一致。
def testA(name,age,gender):
print(f'您的姓名是{name},年龄是{age},性别是{gender}')
testA('小明',20,'男') # 您的姓名是小明,年龄是20,性别是男
2. 关键字参数
关键字参数:函数调用,通过“键=值”形式加以指定,可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。
注意:函数调用时,如果有位置参数,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。
def testA(name,age,gender):
print(f'您的姓名是{name},年龄是{age},性别是{gender}')
testA('小明',20,'男')
testA('张三', gender='男', age=18) # 您的姓名是张三,年龄是18,性别是男
3. 缺省参数
缺省参数:也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值。
注意:1.所有位置参数必须出现在默认参数前,包括函数定义和调用。
2.函数调用时,如果缺省参数传值则修改默认参数值,否则使用这个默认值。
def testA(name,age,gender='男'):
print(f'您的姓名是{name},年龄是{age},性别是{gender}')
testA('张三',18) # 您的姓名是张三,年龄是18,性别是男
testA('李四',18,'女') # 您的姓名是李四,年龄是18,性别是女
4. 不定长参数
不定长参数,也叫可变参数。用于不确定调用的时候会传递多少个参数的场景。
- 包裹位置传递
注意:传递的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包裹位置传递。
def testA(*args):
print(args)
testA() # ()
testA('张三') # ('张三',)
testA('张三',18) # ('张三', 18)
- 包裹关键字传递
def testB(**kwargs):
print(kwargs)
testB(name='张三',age=18,gender='男') # {'name': '张三', 'age': 18, 'gender': '男'}
五、拆包和交换两个变量的值
1. 拆包
- 拆包:元组
def testA():
return 100,200
a1,a2 = testA()
print(a1) # 100
print(a2) # 200
- 拆包:字典
d1 = {'name':'张三','age':18,'gender':'男'}
a1,a2,a3 = d1
# 对字典进行拆包,取出来的是字典的key
print(a1) # name
print(a2) # age
print(a3) # gender
print(d1[a1]) # 张三
print(d1[a2]) # 18
print(d1[a3]) # 男
2. 交换变量值
a,b = 10,20
a,b = b,a
print(a) # 20
print(b) # 10
六、引用
1. 了解引用
在Python中,值是靠引用来传递的。
我们可以用id()来判断两个变量是否为同一个值的引用。可以将id值理解为那块内存的地址标识。
# 1.int类型
a = 1
b = a
print(a) # 1
print(b) # 1
print(id(a)) # 2140104818928
print(id(b)) # 2140104818928
a = 2
print(a) # 2
print(b) # 1 --说明int类型为不可变类型
print(id(a)) # 2140104818960
print(id(b)) # 2140104818928
# 2.列表类型
aa = [10,20]
bb = aa
print(aa) # [10, 20]
print(bb) # [10, 20]
print(id(aa)) # 1355272677248
print(id(bb)) # 1355272677248
# 修改a的值
aa.append(30)
print(aa) # [10, 20, 30]
print(bb) # [10, 20, 30] # 说明列表为可变类型
print(id(aa)) # 2989832071040
print(id(bb)) # 2989832071040
2. 引用当作实参传递
def testA(a):
print(a)
print(id(a))
b = 10
testA(b)
---运行结果---
10
2466967192080
七、可变和不可变类型
- 可变类型:
列表
字典
集合
- 不可变类型:
整型
浮点型
字符串
元组