主要内容: 函数的定义 函数的调用 参数的传递方式 一、函数 1.1 函数的定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。 就像炒菜机可以封装好烹饪的各种步骤一样,函数也可以把我们要执行的代码放到一起,需要执行的时候,直接调用就可以。 方法一: 案例:平方函数,输入变量x返回其平方值x2 #定义函数 def test(a): #定义一个函数为test z = a*a #函数执行语句 print(z) #函数返回值 #调用函数 test(5) #意思是a=5 方法二: def a(x): s=x*x return s #表示函数 print(a(4)) #案例2 def test2(): #定义函数 print(“你好”) test2() #调用函数 1.2 函数的格式 1.3 参数传递 几种参数设定方法:顺序传入,关键词,默认参数、不定长参数 函数默认按照输入参数列表的顺序传入 #顺序传参(s = 1+2*x+3*y+z*x+x*y) def shunxu(x,y,z): s = 1+2*x+3*y+z*x+x*y return s #按位置输出 print(shunxu(1,2,3)) #②关键字传入(s = 1+2*x+3*y+z*x+x*y) def guanjian(x,y,z): s2=1+2*x+3*y+z*x+x*y return s2 print(guanjian(1,y=2,z=3)) print(guanjian(1,z=3,y=2)) print(guanjian(x=1 , y=2 , z=3)) #关键字顺序传入 #可以将位置和关键词的方法混合使用, #如果传入的第一个参数是用关键词传入的, #那么后面每个参数都需要是关键词传入,否则会出现语法错误。 #③默认参数传入 #输入的参数可以是事先设定好赋值,也就是默认值。在调动函数的时候,可以不输入参数,函数内部会直接调用默认参数值。例如默认z=3 def moren(x,y,z=3): s3=1+2*x+3*y+z*x+x*y print(s3) return s3 moren(x=1,y=2) #默认参数的默认值是可以修改的,将上面的z值传入设置为4,需要注意的是,默认参数必须放到参数列表的末位 moren(x=1,y=2,z=4) ———————————————————————————————————————————————————— #④不定长参数(*) #案例一:不定长参数(引用多个函数) def test(a,*b): print(b) print(b) test(77,88,99) ———————————————————————————————————————————————————— #案例二:使用循环传参 def test2(c,*d): r = 0 r += c for x in d: r += x return r t = test2(1,2,3) print(t) ———————————————————————————————————————————————————— #案例三:使用循环传参 def test3(x,*y): for i in y: print(x+i) return print(test3(1,1,2,3)) ———————————————————————————————————————————————————— #案例四:使用list列表传参 a =[1,2,3,4,5] print(1,*a) ———————————————————————————————————————————————————— #④不定长参数(**) #⑤不定长函数导入字典(**ags) def test5(r,**dict5): print(“输出:”) # print(r) #输出r函数 print(dict5) #输出dict5中所有函数 test5(1,a=2,b=3) #调用test5函数 返回值为: 输出: 1 {‘a’: 2, ‘b’: 3} ———————————————————————————————————————————————————— #④不定长参数(**)(案例2) def a(**b): print(b) a(a=1,b=2,c=True) 返回值: {‘a’: 1, ‘b’: 2, ‘c’: True} ———————————————————————————————————————————————————— #⑥匿名函数 test = lambda z,x:z+100+x print(test(1,2)) 返回值: 103 1.4 匿名函数: lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。 lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。 二、全局变量与局部变量 2.1 编写方法 定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问: Python中:模块(module),类(class)以及函数(def、lambda)都会引入新的作用域,其它的代码块(如if/elif/else/、try/except、for/while等) 是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。 方法/类的编写方法 class 类名称(): def 方法名/函数名称(): def 方法名/函数名称(): def 方法名/函数名称(): #方法编写案例(未实现) #方法编写案例 class abc(): def aaa(): print(“你今天真漂亮”) def bbb(): print(“你真帅”) #调用 abc.aaa() #你今天真漂亮 abc.bbb() #你真帅 2.2 修改方法 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。 #修改全局变量案例global num = 1 def fun1(): global num #需要使用global关键字声明 print(num) #修改前参数值(1) num = 123 #修改参数值 print(num) #修改后的参数值(123) fun1() #调用方法 print(num) #调用参数值(123) #修改嵌套作用域中的变量: def outer(): num =10 def inner(): nonlocal num #nonlocal关键字声明 num = 100 print(num) inner() print(num) outer()