关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值
必需参数:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
默认参数:调用函数时,如果没有传递参数,则会使用默认参数
全局变量和局部变量:
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中
注意:列表,字典,集合,类都可以在局部改全局。字符串和整数不能以局部改全局
递归函数:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
eval()字符串转成字典
1 #!/usr/bin/env python 2 #-*-coding:utf-8-*- 3 #_author_:Keep 4 ''' 5 def area(width,height): 6 #calculate area 7 return width * height 8 9 def print_welcome(name): 10 print("Welcome!",name) 11 print_welcome("keep") 12 w = 5 13 h = 6 14 print("width =",w,"height =",h,"area = ",area(w,h)) 15 ''' 16 17 ''' 18 #必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。 19 def printme(str): 20 '打印任何传入的字符串' 21 print(str) 22 return 23 printme(str= "你好!") 24 ''' 25 ''' 26 def printinfo(name,age): 27 "打印任何传入的字符串" 28 print("名字:",name) 29 print("年龄:",age) 30 return 31 printinfo(age=88,name='keep')#函数参数的使用不需要使用指定顺序 32 printinfo('keep',50) 33 ''' 34 ''' 35 def printinfo(name,age = 23): 36 '打印任何传入的字符串' 37 print("名字:",name) 38 print("年龄:",age) 39 return 40 printinfo(name = 'keep',age = 25) 41 print("******************************") 42 printinfo(name = 'keep') 43 ''' 44 ''' 45 def printinfo(arg1,*vartuple):#加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数 46 print("输出:") 47 print(arg1) 48 print(vartuple) 49 #for var in vartuple: 50 # print(var) 51 return 52 printinfo(10,20,50) 53 ''' 54 ''' 55 def printinfo(arg1,**vardict):#加了两个星号 ** 的参数会以字典的形式导入 56 "打印传入任何形式的参数" 57 print("输出:") 58 print(arg1) 59 print(vardict) 60 printinfo(arg1 = 1,a = 2,b = 3) 61 ''' 62 ''' 63 #return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。 64 def sum(arg1,arg2): 65 '返回2个参数的值' 66 total = arg1 + arg2 67 print("函数内:",total) 68 return total 69 total = sum(10,30) 70 print("函数外:",total) 71 ''' 72 ''' 73 #在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。 74 total = 50 #全局变量 75 def sum(arg1,arg2): 76 "返回2个参数的积" 77 total = arg1 * arg2 78 print("函数内是局部变量:",total) 79 return total 80 sum(20,30) 81 print("函数外是全局变量:",total) 82 ''' 83 ''' 84 #修改全局变量需要用global 85 num = 2 86 def fun(): 87 global num #需要使用global关键字声明 88 print(num) 89 num = 888 90 print(num) 91 fun() 92 print(num) 93 ''' 94 ''' 95 #修改作用域的变量需要用nonlocal 96 def outer(): 97 num = 123 98 print(num) 99 def inner(): 100 nonlocal num #nonlocal关键字声明 101 num = 789 102 print(num) 103 inner() 104 print(num) 105 outer() 106 ''' 107 #递归函数: 108 def calc(n): 109 print(n) 110 if int(n/2) >0: 111 return calc(int(n/2)) 112 print("***",n) 113 calc(10)