函数:可以完成某项工作的代码块;创建(也叫定义)函数,可理解为创建一个具有某种用途的工具 一、创建、调用函数 创建函数:使用def关键字实现: def functionname([parameterlist]): ['''comments'''] [functionbody]
        • functionname:定义的函数名,在调用函数时使用
        • parameterlist:可选参数,指定向函数中传递的参数(如有多个,用“,”隔开,不指定则表示没有参数,在调用时,也不指定参数)
        • '''comments''':可选参数,表示为函数指定的注释(内容通常为说明该函数的功能)
        • [functionbody]:可选参数,指定函数体(改函数被调用后,要执行的代码,如有返回值,可以使用return语句返回)
定义函数后,下面的注释和函数体需要缩进;定义空函数,可以是用pass语句 eg:def name(): pass #定义空函数 调用函数:即执行函数,创建函数就是创建工具,调用函数,就是使用工具 functionname([parametersvalue]) functionname:函数名称,要调用的函数名称必须是已经创建好的 parametersvalue:可选参数,用于指定各参数的值(如果需要传递多个,用“,”隔开) eg:def name(a): '''功能:过滤危险字符(如黑客),并过滤后的结果输出 a:要过滤的字符串 没有返回值 ''' import re b = r'(黑客)|(抓包)|(监听)' c = re.sub(b,"***",a) print(c) z = "我是一名黑客!" p = "我是一名程序员,喜欢看监听方面的书籍!" name(z) name(p) 二、参数传递:函数参数的作用就是传递数据给函数使用,函数里用接手的数据进行具体的操作 参数形式:形式参数:在定义函数是,函数名后面括号中的参数就是形式参数 实际参数:调用一个函数,函数名后面括号中的参数为实际参数 传递方式:值传递:实际参数的值传递给形式参数;当实际参数为不可变对象时 引用传递:实际参数引用传递给形式参数;实际参数为可变对象时 eg:def demo(obj): print("原值:",obj) obj += obj #调用函数 print("-"*8,"值传递","-"*8) mot = "只有在被追赶的时候,才能真正的奔跑" print("调用前函数:",mot) demo(mot) print("调用后函数:",mot,"\n\n") print("-"*8,"引用传递","-"*8) list1 = ['数学','语文','物理','化学'] print("引用前函数:",list1) demo(list1) print("引用后函数:",list1) 位置参数:必须按照正确的顺序传到函数中(调用时的数量和位置必须和定义函数参数时一致) 数量必须和定义时一致,位置必须和定义时一致(否则会出现TypeError错误或者产生的结果与预期不符) 关键字参数:使用形式参数的名字来确定输入的参数值 eg:fun_bmi(herght = 1.83,weight = 60,person = "路人甲") 为参数设置默认值:定义函数时,直接指定形式函数参数默认值(避免没指定实际参数时报错) def functionname = (…,parameter1 = defaultvalue1): parameter1:可选,指定向函数中传递的参数,并且为该参数指定默认值为defaultvalue1 可以使用“函数名.__defaults__”查看函数的默认值参数的当前值(结果为一个元组) eg:def fun_bmi(height,weight,person = "路人甲"): print(person,height,weight) fun_bmi(1.80,58) print(fun_bmi.__defaults__) #显示当前函数默认参数的值 使用可变对象作为函数参数的默认值是,多次调用可能会导致意外的情况,故最好使用None作为可变对象的默认值,并加上检查代码 可变参数:也称不定长参数,即传入函数中的实际参数可以是0个、1个、2个到任意个 *parameter参数:表示接受人格多个实际参数并将其放到一个元组中 eg:def coffee(*coffeename): print("我喜欢的咖啡有:"\n"",coffeename) for a in coffeename: print(a) coffee('蓝山') coffee('蓝山','卡布奇诺','土耳其') b = ["土耳其","蓝莓"] coffee(*b) #使用已经存在的列表作为可变参数 eg:def fun_bmi_upgrade(*person): … list_w = [('绮梦',1.70,65),('林玉',180,50),('黛兰',1.72,66)] list_m =[('张三',1.80,75),('李四',175,60)] fun_bmi_upgrade(list_w,list_m) 要想使用已经存在的列表作为函数可变参数,可以在列表前加* **parameter参数:接受任意多个类似关键字参数一样显示赋值的实际参数,并将其放到一个字典中 eg:def name(**sign): print() for a,b in sign.items(): print(a,'的星座是:',b) name(张三= '水瓶座',李四 = '射手座') b = {'王五':'水瓶座','李四':'射手座'} name(**b) #使用已经存在的字典作为可变参数 如果想要使用一个已经存在的字典作为函数的可变参数,可以在字典的名字前加** 三、返回值:函数设置返回值的作用就是将函数处理的结果返回给调用的他的函数 return语句:return [value] return:为函数指定返回值后,可以把它赋给一个变量,用于保存函数的返回结果 value:可选参数,用于指定要返回的值,可以返回一个值(返回多个值时用“,”隔开) 函数中没有return语句或者省略了return语句,将返回None 四、变量的作用域:指程序代码能够访问该变量的区域,如超出该区域再访问时就会报错 根据变量有效范围分为:局部变量和全局变量 局部变量:在函数内部定义并使用的变量,只在函数内部有效。 全局变量:能够作用于行数内外的变量(有两种情况) 一个变量在函数外定义,那么在函数内部和外部都能访问到 eg:message = '唯有在被追赶的时候,你才能真正的奔跑!' #定义外部变量 def f_demo(): print('函数体内:全局变量=',message) #在函数体内输出变量 f_demo() #调用函数 print('函数体外:全局变量=',message) #函数体外输出全局变量 函数体内,并用global关键字修饰后,该变量同样会变成全局变量(函数体内能对其修改) eg:message = '唯有在被追赶的时候,你才能真正的奔跑!' #定义外部变量 print('函数体外:全局变量=',message) def f_demo(): global message message = '命运给我们的不是失望之酒,而是机会之杯' print('函数体内:全局变量=',message) #在函数体内输出变量 f_demo() #调用函数 print('函数体外:全局变量=',message) #函数体外输出全局变量 五、匿名函数:使用lambda表达式:result = lambda[arg1[,arg2,…argn]]:expression 没有名字的函数,需要一个函数但是不想飞升去命名这个函数的场合(这样的函数一般只能用一次) result:用于调用lambda表达式 [arg1[,arg2,…argn]]:可选参数,用于指定要传递的参数列表,多个参数间用“,”隔开 expression:必选参数,用于指定一个实现具体功能的表达式(如果有参数,需要在该表达式中加参数) eg:常规代码: import math def circlearea(r): area = math.pi*r*r return area r = 10 print('圆的面积为:',circlearea(r)) 使用lambda表达式 import math r=10 area = lambda r:math.pi*r*r print('圆的面积为:',area(r)) lambda表达式中,参数可以有多个,表达式只能有一个(只能返回一个值,且不能出现其他非表达式的语句(如for,while等))      
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄