本帖最后由 小江哥 于 2018-8-24 01:16 编辑
5.函数⾼级 局部变量、全局变量 函数返回值\(⼆\) 函数参数\(⼆\) 01. 局部变量局部变量,就是在 函数内部定义的变量不同的函数,可以定义相同的名字的局部变量,但是各⽤个的不会产⽣影响局部变量的作⽤域只在函数内部局部变量的⽬的是 存储需要临时保存的数据 # 函数中的两个局部变量虽然同名,但互不影响 def test1(): a = 10 print("%d" % a) def test2(): a = 5 print("%d" % a) test1() test2() 01. 全局变量 2.1 概念在函数外边定义的变量叫做 全局变量全局变量能够在所有的函数中进⾏访问 全局变量能够在所有的函数中进⾏访问 # 定义全局变量 a = 100 def test1(): print(a) def test2(): print(a) # 调⽤函数 test1() test2() 2.1 函数内修改全局变量看如下代码: a = 10 def test(): a = 5 print("函数内a:%d" %a) test() print("函数外a:%d" %a) 函数内赋值变量 时,默认为定义并赋值局部变量,赋值后获取的也是局部变量的值如果在函数中修改全局变量,那么就需要使⽤ global 进⾏声明,否则出错 a = 10 def test(): global aa = 5 # 修改全局变量 print("函数内a:%d" %a) test()print("函数外a:%d" %a) 01. 函数返回值(⼆) 3.1 多个return def is_even_num(num): """判断奇偶数""" if num % 2 == 0: return True else: return False ⼀个函数中可以有多个return语句,但是只要有⼀个return语句被执⾏,那么这个函数就会结束 3.1 多个返回值 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会⾃动将元组 拆包 成单个数据 01. 函数参数(⼆) 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 1SyntaxError: non-default argument follows default argument 4.1 关键字参数调⽤函数时,实参可以指定对应的形参,称为 关键字参数 def printinfo(name, age): # 打印任何传⼊的字符串 print("Name: %s", % name) print("Age: %s", % age) printinfo(age=9,name="miki" ) 4.1 可变参数需求: 参数数量不确定,能否接收? args函数可以定义 可变参数,⽤于接收任意数量的参数可变参数的前边需要添加*,⽤于提示python解释器该参数为可变参数使⽤可变参数直接⽤args即可(不需要加*) 可变参数的本质是 将传递的参数包装成了元组 def sum_num(a, b, *args): result = a + bfor temp in args: result += tempreturn result sum_num(1, 2, 3, .., n) # 关键字参数⼀旦使⽤,所有实参都要使⽤,除⾮该实参对应的是可变参数 # sum_num(1, 2, 3, 4, a=5) # sum_num(a=5, b=4) kwargs可变参数还有⼀种形式 可以接收不存在的关键字参数定义参数时需要在变量名前添加两个*这种可变参数会将 不存在的关键字参数包装成字典 def sum_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) |