文章目录
1. 局部变量
局部变量,就是在 函数内部定义的变量
不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
局部变量的作用域只在函数内部
局部变量的目的是 存储需要临时保存的数据
# 函数中的两个局部变量虽然同名,但互不影响
def test1():
a = 10
print("%d" % a)
def test2():
a = 5
print("%d" % a)
test1()
test2()
2. 全局变量
2.1 概念
在函数外边定义的变量叫做 全局变量
全局变量能够在所有的函数中进行访问
# 定义全局变量
a = 100
def test1():
print(a)
def test2():
print(a)
# 调用函数
test1()
test2()
2.2 函数内修改全局变量
看如下代码:
a = 10
def test():
a = 5
print("函数内a:%d" %a)
test()
print("函数外a:%d" %a)
函数内赋值变量 时,默认为定义并赋值局部变量,赋值后获取的也是局部变量的值
如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
a = 10
def test():
global a
a = 5 # 修改全局变量
print("函数内a:%d" %a)
test()
print("函数外a:%d" %a)
2.3 全局变量命名规范
python社区中没有区分全局变量和局部变量的书写方法,为了方便区分全局变量和局部变量,全局变量可以命名为 g_变量名
全局变量一般 定义在文件顶部
3. 函数返回值
3.1 多个return
def is_even_num(num):
"""判断奇偶数"""
if num % 2 == 0:
return True
else:
return False
一个函数中可以有多个return语句,但是只要有一个return语句被执行,那么这个函数就会结束
3.2 多个返回值
def func2():
return 1, 1.5
a = func2()
print(a)
a, b = func2()
print(a)
print(b)
a, b, c = 1, 1.5, "hello"
print(a)
print(b)
print(c)
当返回多个数据时,python会自动将数据 组包 成元组
如果使用多个变量接收返回值,python会自动将元组 拆包 成单个数据
4. 函数参数
4.1 缺省参数
形参设定默认值 称为 缺省参数
调用函数时,如果没有传入缺省参数对应的实参,则实参使用默认值。
def printinfo(name, age = 35):
# 打印任何传入的字符串
print("Name: %s", % name)
print("Age: %s", % age)
# 调用printinfo函数
printinfo("miki")
printinfo("miki", 20)
注意:带有默认值的行参一定要位于参数列表的最后面。
>>> def printinfo(name, age=35, sex):
... print name
...
File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
4.2 命名参数
调用函数时,实参可以指定对应的形参,称为 命名参数
def printinfo(name, age):
# 打印任何传入的字符串
print("Name: %s", % name)
print("Age: %s", % age)
printinfo(age=9,name="miki" )
4.3 不定长参数
需求: 参数数量不确定,能否接收?
4.3.1 args
- 函数可以定义 不定长参数,用于接收任意多数量的参数
- 不定长参数的前边需要添加
*
,用于提示python解释器该参数为不定长参数 - 使用不定长参数直接用args即可(不需要加*)
不定长参数的本质是 将传递的参数包装成了元组
def sum_num(a, b, *args):
result = a + b
for temp in args:
result += temp
return result
sum_num(1, 2, 3, .., n)
# 命名参数一旦使用,所有实参都要使用,除非该实参为不定长参数
# sum_num(1, 2, 3, 4, a=5)
# sum_num(a=5, b=4)
4.3.2 kwargs
不定长参数还有一种形式 可以接收不存在的命名参数
定义参数时需要在变量名前添加两个*
这种不定义参数会将 不存在的命名参数包装成字典
defsum_num(a, b, *args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)
sum_num(1, 2, 3, .., n, mm=5, nn=6)
传递不定长参数
如果 将不定长参数传递给其他函数,则需要在不定长参数前添加对应的*,才能正常传递
def sum_num(a, b, *args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)
test(*args, **kwargs)
def test(*args, **kwargs):
print(args)
print(kwargs)
sum_num(1, 2, 3, .., n, mm=5, nn=6)
5. 拆包
def get_my_info():
high = 178
weight = 100
age = 18
return high, weight, age
# result = get_my_info()
# print(result)
my_high, my_weight, my_age = get_my_info()
print(my_high)
print(my_weight)
print(my_age)
总结:
拆包时要注意,需要拆的数据的个数要与变量的个数相同,否则程序会异常
除了对元组拆包之外,还可以对列表、字典等拆包
In [17]: a, b = (11, 22)
In [18]: a
Out[18]: 11
In [19]: b
Out[19]: 22
In [20]: a, b = [11, 22]
In [21]: a
Out[21]: 11
In [22]: b
Out[22]: 22
In [23]: a, b = {"m":11, "n":22} # 取出来的是key,而不是键值对
In [24]: a
Out[24]: 'm'
In [25]: b
Out[25]: 'n'