函数基本框架如下(【】中的内容表示是或选的,可以不写):
def 函数名(参数):
【'''函数说明文档'''】
函数主体
【return 返回对象】
函数小例子
#我们先定义一个函数 def find_max(series): '''查找一个序列中最大值''' the_max = series[0] for j in series: if j >= the_max: the_max = j return the_max #调用函数 series = [1,20,23,1111,222,-10] print('序列最大值:',find_max(series))
输出:序列最大值: 1111
事实上,在调用很多python函数时,我们都使用了默认的参数设置
可变参数
def summation(*series): #注意这里参数前面的有一个* 表示的series这个参数是可变参数 '''求一个序列元素的加和''' sum = 0 for i in series: sum += i return sum print(summation(1,2,3,4,5,6,7)) #可变参数的设置 使得我们可以传入任意个参数 函数调用时会自动组装为一个tuple
输出:28
如果不设置为可变参数的话,需要传入一个序列形式的参数
def summation(series): '''求一个序列元素的加和''' sum = 0 for i in series: sum += i return sum print(summation([1,2,3,4,5,6,7]) )
输出:28
关键词参数
def info_insert(name, age, university, **other): print('姓名:',name,'年龄:',age,'学校:',university,'其他信息:',other)
注意参数**other,这个参数允许我们传入任意个含参数名的参数,这些关键词参数在函数调用时会自动组装为一个dict
例如我们在做信息录入时,姓名,年龄,学校是必填信息,而其他信息是选填的,这时候就可以使用关键词参数
info_insert('娜塔莎 罗曼诺夫',99,'圣地亚哥大学')
输出:
姓名: 娜塔莎 罗曼诺夫 年龄: 99 学校: 圣地亚哥大学 其他信息: {}
info_insert('娜塔莎 罗曼诺夫',99,'圣地亚哥大学',性别='女',工作='特工')
输出:
姓名: 娜塔莎 罗曼诺夫 年龄: 99 学校: 圣地亚哥大学 其他信息: {'性别': '女', '工作': '特工'}
混合参数
在python函数定义中,可以用必选参数,默认参数,可变参数,关键词参数。注意这些参数的定义顺序为:必选参数,默认参数,可变参数和关键词参数
def info_insert(name, age, married='未婚',*schools, **kw): print('姓名:',name,'年龄:',age,'婚姻状况:',married,'就读学校:',schools,'其他信息:',kw) info_insert('娜塔莎 罗曼诺夫',99)
输出:
姓名: 娜塔莎 罗曼诺夫 年龄: 99 婚姻状况: 未婚 就读学校: () 其他信息: {}
info_insert('娜塔莎 罗曼诺夫',99,'已婚','浙江大学','上海财经大学')
输出:
姓名: 娜塔莎 罗曼诺夫 年龄: 99 婚姻状况: 已婚 就读学校: ('浙江大学', '上海财经大学') 其他信息: {}
info_insert('娜塔莎 罗曼诺夫',99,'已婚','浙江大学','上海财经大学',性别='女',工作='特工')
输出:
姓名: 娜塔莎 罗曼诺夫 年龄: 99 婚姻状况: 已婚 就读学校: ('浙江大学', '上海财经大学') 其他信息: {'性别': '女', '工作': '特工'}
递归函数
递归函数的含义是在函数定义过程中,会调用函数本身
def factorial(n): '''计算n的阶乘''' if n == 1: return 1 else: return n*factorial(n-1) factorial(5)
输出:120
匿名函数——lambda函数
lambda函数的基本格式为: lambda 参数: 表达式
匿名函数定义更为简便(控制在一行),有些简单的函数可以用它来写,或者作为复杂函数的组成部分
s = lambda x:print(x,'大于 1') if x>1 else print(x,'小于 1')
s(10)
s(-10)
输出:
10 大于 1 -10 小于 1