函数可以让我们代码结构更清晰,而且避免了代码的重复,冗余,使一段代码或者功能可以反复的被调用,大大提高了开发效率
- def 函数名(参数1,参数2,*args,默认参数,**kwargs):
- """注释:函数功能和参数说明"""
- 函数体
- ……
- return 返回值
- 1.定义:def 关键词开头,空格之后接函数名称和圆括号()。
- 2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。
- 参数可以定义多个,也可以不定义。
- 参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。
- 如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序
- 3.注释:函数的第一行语句应该添加注释。
- 4.函数体:函数内容以冒号起始,并且缩进。
- 5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None
实例如下:
三、函数的调用
- def my_max(x,y):
- '''比较两个值的大小,返回最大的那个数'''
- if x > y:
- return x
- if x < y:
- return y
- else:
- return '%s=%s'%(x,y)
调用函数很简单,就是已经定义的函数名加括号,如果此函数需要参数,那括号内就要加入需要传的参数。如,调用上面定义的 my_max 函数的方法如下:
我们只需要在函数的最后加上一个 return,return 后面写上你要返回的值就可以了。
接下来,我们就来研究一下这个 return 的用法。
return 关键字的作用
return 是一个关键字,在 pycharm 里,你会看到它变成蓝色了。你必须一字不差的把这个单词给背下来。
这个词翻译过来就是 "返回",所以我们管写在 return 后面的值叫 "返回值"
要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值
没有返回值
不写 return 的情况下,会默认返回一个 None, 等同于 return None
有一个返回值
return 后面跟上返回值即可,调用函数的话可以用一个变量来接收这个返回值(就是将函数执行完之后的返回值赋给这个变量), 如下:
- def my_sum(x,y):
- '''求两个数字的和,返回两数之和'''
- return x+y
- sum = my_sum(3,2) #调用函数
- print(sum) #结果:5
有多个返回值
如果有多个返回值的话只需在 return 后面依次跟上返回值,用逗号隔开。
调用函数 的时候可以用一个变量来接收(此时返回的是一个元祖,赋值给此变量),也可以用多个变量来接收,此时返回值会按变量的顺序,一 一赋值(变量数要跟返回值的数目相等),如下:
- def getNum():
- '''返回三个数字的函数'''
- return 1,3,6
- res = getNum() #用一个变量接收返回值
- print(res) #结果是:(1, 3, 6)
- a,b,c = getNum() #用一个变量接收返回值
- 9 print(a, b, c)#结果是:1 3 6
如下:
- '''求两个数字的和,返回两数之和'''
- return x+y
- my_sum(3,2) #位置传参
- my_sum(x=3,y=2) #关键字传参
此外,还有一种参数是默认参数,是指在定义函数的时候,其中一个或者多个参数已经指定了默认值
这种情况下在调用函数进行传参的时候,依然可以传递实参给此形参,如果不传,此参数的值即为默认值,如下:
另外,还有一种特殊的参数,他可以接收任何数量的参数,称为动态参数
- def user_info(name,sex='男'):
- '''用户信息'''
- print('%s的性别是%s'%(name,sex))
- user_info('小明') #结果为:小明的性别是男生 。不用指定的情况下,默认是男
- user_info('小花','女')#结果是:小花的性别是女。 传参的情况下,会覆盖默认值
而动态参数又有两种,一种是参数名前加一个星号 "*" 这种参数可以接收不限数量的位置参数,然后组成一个元祖
另一种是动态参数是参数名前加两个星号 "**" 这种参数可以接收不限数量的关键字参数,然后组成一个字典
如下:
- def func(*args,**kwargs):
- print(args)
- print(kwargs)
- func(1,2,3,a='a',b='b',c='c')
- #结果为:
- # (1, 2, 3)
- # {'b': 'b', 'c': 'c', 'a': 'a'}
需要注意的是:如果一个函数的参数包括:位置参数,默认参数,以及动态参数 *args 和 **kwargs,那么他们的顺序应该是:(位置参数,*args,默认参数,**kwargs)六、作业练习
- # 必做题:
- # 1、整理函数相关知识点,画思维导图,写博客
- # 2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
- def func(li):
- li1 = []
- for i in range(len(li)):
- if i % 2 == 1:
- li1.append(li[i])
- return li1
- l = func(['a','b','c','d','e'])
- print(l)
- # 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
- def func1(o):
- if len(o) > 5:
- return True
- else:
- return False
- print(func1('abc'))
- print(func1((1,2,3,4,5)))
- print(func1([1,2,3,4,5,6,7]))
- 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
- def func2(l):
- if len(l) > 2:
- l = l[0:2]
- return l
- print(func2(['a','b','c']))
- # 5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
- def func3(str):
- count_i = 0
- count_s = 0
- count_sp = 0
- count_o = 0
- for i in str:
- if i.isdigit():
- count_i += 1
- elif i.isalpha():
- count_s += 1
- elif i == ' ':
- count_sp += 1
- else:
- count_o += 1
- return count_i,count_s,count_sp,count_o
- i,s,sp,o = func3('B e32 \# ~sd')
- print(i,s,sp,o)
- # 6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
- def func4(s):
- if ' ' in s:
- return True
- else:
- return False
- print(func4('ab c'))
- print(func4(['a',' ','c']))
- 7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
- dic = {"k1": "v1v1", "k2": [11,22,33,44]}
- PS:字典中的value只能是字符串或列表
- def func5(dic):
- dic_new = {}
- for k,v in dic.items():
- if len(v) > 2:
- v_new = v[0:2]
- dic_new.update({k:v_new})
- return dic_new
- dic = {"k1": "v1v1", "k2": [11,22,33,44]}
- print(func5(dic))
- # 8、写函数,接收两个数字参数,返回比较大的那个数字。
- def my_max(x,y):
- if x > y:
- return x
- elif x < y:
- return y
- else:
- return '两者同样大'
- print(my_max(3,6))
- print(my_max(2,2))
- 选做题:
- 9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。
- import os
- def funx(file,msg):
- old_file = file
- with open('new_file.txt','w',encoding='utf-8') as new_f:
- new_f.write(msg)
- os.remove(old_file)
- os.rename('new_file.txt',old_file)
- funx('test.txt','这是修改后的内容')
- # 10、写一个函数完成三次登陆功能,再写一个函数完成注册功能
- def func_d():
- count = 3
- while count > 0:
- username = input('请输入您的用户名:').strip()
- password = input('请输入您的密码:').strip()
- if username == 'fuyong' and password == '123':
- print('恭喜,登录成功!')
- break
- else:
- print('用户名或者密码错误,请重新输入。您还有%s次机会!'%(count-1))
- count -= 1
- continue
- def func_z():
- user_dic = {}
- username = input('请输入您要注册的用户名:').strip()
- password = input('请输入您要注册的密码:').strip()
- user_dic.update({username:password})
- print('恭喜,注册成功!')
- func_d()
- func_z()
- #
- # 明日内容:
- # 函数的动态参数:http://www.cnblogs.com/Eva-J/articles/7125925.html
- # 函数的进阶内容:http://www.cnblogs.com/Eva-J/articles/7156261.html
- #
- # 默写内容:
- # def my_len(lst):
- # count = 0
- # for i in lst:
- # count+=1
- # return count
- #
- # l = [1,2,3,4]
- # len_count = my_len(l)
- # print(len_count)
- #
函数可以让我们代码结构更清晰,而且避免了代码的重复,冗余,使一段代码或者功能可以反复的被调用,大大提高了开发效率
- def 函数名(参数1,参数2,*args,默认参数,**kwargs):
- """注释:函数功能和参数说明"""
- 函数体
- ……
- return 返回值
- 1.定义:def 关键词开头,空格之后接函数名称和圆括号()。
- 2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。
- 参数可以定义多个,也可以不定义。
- 参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。
- 如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序
- 3.注释:函数的第一行语句应该添加注释。
- 4.函数体:函数内容以冒号起始,并且缩进。
- 5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None
实例如下:
三、函数的调用
- def my_max(x,y):
- '''比较两个值的大小,返回最大的那个数'''
- if x > y:
- return x
- if x < y:
- return y
- else:
- return '%s=%s'%(x,y)
调用函数很简单,就是已经定义的函数名加括号,如果此函数需要参数,那括号内就要加入需要传的参数。如,调用上面定义的 my_max 函数的方法如下:
我们只需要在函数的最后加上一个 return,return 后面写上你要返回的值就可以了。
接下来,我们就来研究一下这个 return 的用法。
return 关键字的作用
return 是一个关键字,在 pycharm 里,你会看到它变成蓝色了。你必须一字不差的把这个单词给背下来。
这个词翻译过来就是 "返回",所以我们管写在 return 后面的值叫 "返回值"
要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值
没有返回值
不写 return 的情况下,会默认返回一个 None, 等同于 return None
有一个返回值
return 后面跟上返回值即可,调用函数的话可以用一个变量来接收这个返回值(就是将函数执行完之后的返回值赋给这个变量), 如下:
- def my_sum(x,y):
- '''求两个数字的和,返回两数之和'''
- return x+y
- sum = my_sum(3,2) #调用函数
- print(sum) #结果:5
有多个返回值
如果有多个返回值的话只需在 return 后面依次跟上返回值,用逗号隔开。
调用函数 的时候可以用一个变量来接收(此时返回的是一个元祖,赋值给此变量),也可以用多个变量来接收,此时返回值会按变量的顺序,一 一赋值(变量数要跟返回值的数目相等),如下:
- def getNum():
- '''返回三个数字的函数'''
- return 1,3,6
- res = getNum() #用一个变量接收返回值
- print(res) #结果是:(1, 3, 6)
- a,b,c = getNum() #用一个变量接收返回值
- 9 print(a, b, c)#结果是:1 3 6
如下:
- '''求两个数字的和,返回两数之和'''
- return x+y
- my_sum(3,2) #位置传参
- my_sum(x=3,y=2) #关键字传参
此外,还有一种参数是默认参数,是指在定义函数的时候,其中一个或者多个参数已经指定了默认值
这种情况下在调用函数进行传参的时候,依然可以传递实参给此形参,如果不传,此参数的值即为默认值,如下:
另外,还有一种特殊的参数,他可以接收任何数量的参数,称为动态参数
- def user_info(name,sex='男'):
- '''用户信息'''
- print('%s的性别是%s'%(name,sex))
- user_info('小明') #结果为:小明的性别是男生 。不用指定的情况下,默认是男
- user_info('小花','女')#结果是:小花的性别是女。 传参的情况下,会覆盖默认值
而动态参数又有两种,一种是参数名前加一个星号 "*" 这种参数可以接收不限数量的位置参数,然后组成一个元祖
另一种是动态参数是参数名前加两个星号 "**" 这种参数可以接收不限数量的关键字参数,然后组成一个字典
如下:
- def func(*args,**kwargs):
- print(args)
- print(kwargs)
- func(1,2,3,a='a',b='b',c='c')
- #结果为:
- # (1, 2, 3)
- # {'b': 'b', 'c': 'c', 'a': 'a'}
需要注意的是:如果一个函数的参数包括:位置参数,默认参数,以及动态参数 *args 和 **kwargs,那么他们的顺序应该是:(位置参数,*args,默认参数,**kwargs)六、作业练习
- # 必做题:
- # 1、整理函数相关知识点,画思维导图,写博客
- # 2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
- def func(li):
- li1 = []
- for i in range(len(li)):
- if i % 2 == 1:
- li1.append(li[i])
- return li1
- l = func(['a','b','c','d','e'])
- print(l)
- # 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
- def func1(o):
- if len(o) > 5:
- return True
- else:
- return False
- print(func1('abc'))
- print(func1((1,2,3,4,5)))
- print(func1([1,2,3,4,5,6,7]))
- 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
- def func2(l):
- if len(l) > 2:
- l = l[0:2]
- return l
- print(func2(['a','b','c']))
- # 5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
- def func3(str):
- count_i = 0
- count_s = 0
- count_sp = 0
- count_o = 0
- for i in str:
- if i.isdigit():
- count_i += 1
- elif i.isalpha():
- count_s += 1
- elif i == ' ':
- count_sp += 1
- else:
- count_o += 1
- return count_i,count_s,count_sp,count_o
- i,s,sp,o = func3('B e32 \# ~sd')
- print(i,s,sp,o)
- # 6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
- def func4(s):
- if ' ' in s:
- return True
- else:
- return False
- print(func4('ab c'))
- print(func4(['a',' ','c']))
- 7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
- dic = {"k1": "v1v1", "k2": [11,22,33,44]}
- PS:字典中的value只能是字符串或列表
- def func5(dic):
- dic_new = {}
- for k,v in dic.items():
- if len(v) > 2:
- v_new = v[0:2]
- dic_new.update({k:v_new})
- return dic_new
- dic = {"k1": "v1v1", "k2": [11,22,33,44]}
- print(func5(dic))
- # 8、写函数,接收两个数字参数,返回比较大的那个数字。
- def my_max(x,y):
- if x > y:
- return x
- elif x < y:
- return y
- else:
- return '两者同样大'
- print(my_max(3,6))
- print(my_max(2,2))
- 选做题:
- 9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。
- import os
- def funx(file,msg):
- old_file = file
- with open('new_file.txt','w',encoding='utf-8') as new_f:
- new_f.write(msg)
- os.remove(old_file)
- os.rename('new_file.txt',old_file)
- funx('test.txt','这是修改后的内容')
- # 10、写一个函数完成三次登陆功能,再写一个函数完成注册功能
- def func_d():
- count = 3
- while count > 0:
- username = input('请输入您的用户名:').strip()
- password = input('请输入您的密码:').strip()
- if username == 'fuyong' and password == '123':
- print('恭喜,登录成功!')
- break
- else:
- print('用户名或者密码错误,请重新输入。您还有%s次机会!'%(count-1))
- count -= 1
- continue
- def func_z():
- user_dic = {}
- username = input('请输入您要注册的用户名:').strip()
- password = input('请输入您要注册的密码:').strip()
- user_dic.update({username:password})
- print('恭喜,注册成功!')
- func_d()
- func_z()
- #
- # 明日内容:
- # 函数的动态参数:http://www.cnblogs.com/Eva-J/articles/7125925.html
- # 函数的进阶内容:http://www.cnblogs.com/Eva-J/articles/7156261.html
- #
- # 默写内容:
- # def my_len(lst):
- # count = 0
- # for i in lst:
- # count+=1
- # return count
- #
- # l = [1,2,3,4]
- # len_count = my_len(l)
- # print(len_count)
- #
来源: http://www.bubuko.com/infodetail-2442213.html