python 学习第9天

Posted jiangchunsheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 学习第9天相关的知识,希望对你有一定的参考价值。

一、函数的作用

函数可以让我们代码结构更清晰,而且避免了代码的重复,冗余,使一段代码或者功能可以反复的被调用,大大提高了开发效率

二、函数的定义

技术分享图片
def 函数名(参数1,参数2,*args,默认参数,**kwargs):
    """注释:函数功能和参数说明"""
    函数体
    ……
    return 返回值

1.定义:def 关键词开头,空格之后接函数名称和圆括号()。
2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。
    参数可以定义多个,也可以不定义。
    参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。
    如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序 3.注释:函数的第一行语句应该添加注释。 4.函数体:函数内容以冒号起始,并且缩进。 5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None
技术分享图片

实例如下:

技术分享图片
1 def my_max(x,y):
2     ‘‘‘比较两个值的大小,返回最大的那个数‘‘‘
3     if x > y:
4         return x
5     if x < y:
6         return y
7     else:
8         return %s=%s%(x,y)
技术分享图片

 

三、函数的调用

调用函数很简单,就是已经定义的函数名加括号,如果此函数需要参数,那括号内就要加入需要传的参数。如,调用上面定义的my_max函数的方法如下:

1 my_max(5,2)

四、函数的返回值

我们只需要在函数的最后加上一个return,return后面写上你要返回的值就可以了。

接下来,我们就来研究一下这个return的用法。

return关键字的作用

  return 是一个关键字,在pycharm里,你会看到它变成蓝色了。你必须一字不差的把这个单词给背下来。

  这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”

  要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值

没有返回值

  不写return的情况下,会默认返回一个None,等同于 return None

有一个返回值

  return 后面跟上返回值即可,调用函数的话可以用一个变量来接收这个返回值(就是将函数执行完之后的返回值赋给这个变量),如下:

1 def my_sum(x,y):
2     ‘‘‘求两个数字的和,返回两数之和‘‘‘
3     return x+y
4 
5 sum = my_sum(3,2)   #调用函数
6 print(sum)          #结果:5

有多个返回值

  如果有多个返回值的话只需在return后面依次跟上返回值,用逗号隔开。

  调用函数 的时候可以用一个变量来接收(此时返回的是一个元祖,赋值给此变量),也可以用多个变量来接收,此时返回值会按变量的顺序,一 一赋值(变量数要跟返回值的数目相等),如下:

技术分享图片
1 def getNum():
2     ‘‘‘返回三个数字的函数‘‘‘
3     return 1,3,6
4 
5 res = getNum()   #用一个变量接收返回值
6 print(res)        #结果是:(1, 3, 6)
7 
8 a,b,c = getNum()  #用一个变量接收返回值
9 print(a,b,c)      #结果是:1 3 6
技术分享图片

五、函数的参数

函数的参数分为形参和实参。简单来讲,形参就是定义函数的时候的参数,而实参就是调用函数的时候传递的参数

而在调用函数进行传值的时候,传参方式又分为位置传参和关键字传参。

位置传参是按照位置进行传值(此时,解释器会按照顺序,将实参一 一对应赋值给形参),

关键字传参是按照关键字进行传值(这种传参方式是直接将实参以赋值的方式传给形参,如x=1,y=2)

位置传参的优点是方便,只需一一写出需要传递的实参就行,关键之传参的优点是可以改变参数顺序。

如下:

1     ‘‘‘求两个数字的和,返回两数之和‘‘‘
2     return x+y
3 
4 my_sum(3,2)      #位置传参
5 my_sum(x=3,y=2)  #关键字传参

此外,还有一种参数是默认参数,是指在定义函数的时候,其中一个或者多个参数已经指定了默认值

这种情况下在调用函数进行传参的时候,依然可以传递实参给此形参,如果不传,此参数的值即为默认值,如下:

1 def user_info(name,sex=):
2     ‘‘‘用户信息‘‘‘
3     print(%s的性别是%s%(name,sex))
4 
5 user_info(小明)     #结果为:小明的性别是男生 。不用指定的情况下,默认是男
6 user_info(小花,)#结果是:小花的性别是女。    传参的情况下,会覆盖默认值

 

另外,还有一种特殊的参数,他可以接收任何数量的参数,称为动态参数

  而动态参数又有两种,一种是参数名前加一个星号 " * " 这种参数可以接收不限数量的位置参数,然后组成一个元祖

  另一种是动态参数是参数名前加两个星号 “ ** ”  这种参数可以接收不限数量的关键字参数,然后组成一个字典

  如下:

技术分享图片
1 def func(*args,**kwargs):
2     print(args)
3     print(kwargs)
4 
5 func(1,2,3,a=a,b=b,c=c)
6 #结果为:
7 # (1, 2, 3)
8 # {‘b‘: ‘b‘, ‘c‘: ‘c‘, ‘a‘: ‘a‘}
技术分享图片

需要注意的是:如果一个函数的参数包括:位置参数,默认参数,以及动态参数 *args 和 **kwargs,那么他们的顺序应该是:(位置参数,*args,默认参数,**kwargs)

 

六、作业练习

 

  

技术分享图片
技术分享图片
  1 # 必做题:
  2 # 1、整理函数相关知识点,画思维导图,写博客
  3 # 2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
  4 def func(li):
  5     li1 = []
  6     for i in range(len(li)):
  7         if i % 2 == 1:
  8             li1.append(li[i])
  9     return li1
 10 
 11 l = func([a,b,c,d,e])
 12 print(l)
 13 
 14 # 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
 15 def func1(o):
 16     if len(o) > 5:
 17         return True
 18     else:
 19         return False
 20 print(func1(abc))
 21 print(func1((1,2,3,4,5)))
 22 print(func1([1,2,3,4,5,6,7]))
 23 
 24 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
 25 def func2(l):
 26     if len(l) > 2:
 27         l = l[0:2]
 28     return l
 29 print(func2([a,b,c]))
 30 # 5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
 31 def func3(str):
 32     count_i = 0
 33     count_s = 0
 34     count_sp = 0
 35     count_o = 0
 36 
 37     for i in str:
 38         if i.isdigit():
 39             count_i += 1
 40         elif i.isalpha():
 41             count_s += 1
 42         elif i ==  :
 43             count_sp += 1
 44         else:
 45             count_o += 1
 46     return count_i,count_s,count_sp,count_o
 47 
 48 i,s,sp,o = func3(B e32 \\# ~sd)
 49 print(i,s,sp,o)
 50 # 6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
 51 def func4(s):
 52     if   in s:
 53         return True
 54     else:
 55         return False
 56 print(func4(ab c))
 57 print(func4([a, ,c]))
 58 7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
 59     dic = {"k1": "v1v1", "k2": [11,22,33,44]}
 60     PS:字典中的value只能是字符串或列表
 61 def func5(dic):
 62     dic_new = {}
 63     for k,v in dic.items():
 64         if len(v) > 2:
 65             v_new = v[0:2]
 66         dic_new.update({k:v_new})
 67     return dic_new
 68 dic = {"k1": "v1v1", "k2": [11,22,33,44]}
 69 print(func5(dic))
 70 # 8、写函数,接收两个数字参数,返回比较大的那个数字。
 71 def my_max(x,y):
 72     if x > y:
 73         return x
 74     elif x < y:
 75         return y
 76     else:
 77         return 两者同样大
 78 print(my_max(3,6))
 79 print(my_max(2,2))
 80 
 81 选做题:
 82 9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。
 83 import os
 84 def funx(file,msg):
 85     old_file = file
 86     with open(new_file.txt,w,encoding=utf-8) as new_f:
 87         new_f.write(msg)
 88     os.remove(old_file)
 89     os.rename(new_file.txt,old_file)
 90 funx(test.txt,这是修改后的内容)
 91 # 10、写一个函数完成三次登陆功能,再写一个函数完成注册功能
 92 def func_d():
 93     count = 3
 94     while count > 0:
 95         username = input(请输入您的用户名:).strip()
 96         password = input(请输入您的密码:).strip()
 97         if username == fuyong and password == 123:
 98             print(恭喜,登录成功!)
 99             break
100         else:
101             print(用户名或者密码错误,请重新输入。您还有%s次机会!%(count-1))
102             count -= 1
103             continue
104 
105 def func_z():
106     user_dic = {}
107     username = input(请输入您要注册的用户名:).strip()
108     password = input(请输入您要注册的密码:).strip()
109     user_dic.update({username:password})
110     print(恭喜,注册成功!)
111 func_d()
112 func_z()
113 #
114 # 明日内容:
115 # 函数的动态参数:http://www.cnblogs.com/Eva-J/articles/7125925.html
116 # 函数的进阶内容:http://www.cnblogs.com/Eva-J/articles/7156261.html
117 #
118 # 默写内容:
119 # def my_len(lst):
120 #     count = 0
121 #     for i in lst:
122 #         count+=1
123 #     return count
124 #
125 # l = [1,2,3,4]
126 # len_count = my_len(l)
127 # print(len_count)
128 #
技术分享图片

 

 

一、函数的作用

函数可以让我们代码结构更清晰,而且避免了代码的重复,冗余,使一段代码或者功能可以反复的被调用,大大提高了开发效率

二、函数的定义

技术分享图片
def 函数名(参数1,参数2,*args,默认参数,**kwargs):
    """注释:函数功能和参数说明"""
    函数体
    ……
    return 返回值

1.定义:def 关键词开头,空格之后接函数名称和圆括号()。
2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。
    参数可以定义多个,也可以不定义。
    参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。
    如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序 3.注释:函数的第一行语句应该添加注释。 4.函数体:函数内容以冒号起始,并且缩进。 5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None
技术分享图片

实例如下:

技术分享图片
1 def my_max(x,y):
2     ‘‘‘比较两个值的大小,返回最大的那个数‘‘‘
3     if x > y:
4         return x
5     if x < y:
6         return y
7     else:
8         return %s=%s%(x,y)
技术分享图片

 

三、函数的调用

调用函数很简单,就是已经定义的函数名加括号,如果此函数需要参数,那括号内就要加入需要传的参数。如,调用上面定义的my_max函数的方法如下:

1 my_max(5,2)

四、函数的返回值

我们只需要在函数的最后加上一个return,return后面写上你要返回的值就可以了。

接下来,我们就来研究一下这个return的用法。

return关键字的作用

  return 是一个关键字,在pycharm里,你会看到它变成蓝色了。你必须一字不差的把这个单词给背下来。

  这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”

  要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值

没有返回值

  不写return的情况下,会默认返回一个None,等同于 return None

有一个返回值

  return 后面跟上返回值即可,调用函数的话可以用一个变量来接收这个返回值(就是将函数执行完之后的返回值赋给这个变量),如下:

1 def my_sum(x,y):
2     ‘‘‘求两个数字的和,返回两数之和‘‘‘
3     return x+y
4 
5 sum = my_sum(3,2)   #调用函数
6 print(sum)          #结果:5

有多个返回值

  如果有多个返回值的话只需在return后面依次跟上返回值,用逗号隔开。

  调用函数 的时候可以用一个变量来接收(此时返回的是一个元祖,赋值给此变量),也可以用多个变量来接收,此时返回值会按变量的顺序,一 一赋值(变量数要跟返回值的数目相等),如下:

技术分享图片
1 def getNum():
2     ‘‘‘返回三个数字的函数‘‘‘
3     return 1,3,6
4 
5 res = getNum()   #用一个变量接收返回值
6 print(res)        #结果是:(1, 3, 6)
7 
8 a,b,c = getNum()  #用一个变量接收返回值
9 print(a,b,c)      #结果是:1 3 6
技术分享图片

五、函数的参数

函数的参数分为形参和实参。简单来讲,形参就是定义函数的时候的参数,而实参就是调用函数的时候传递的参数

而在调用函数进行传值的时候,传参方式又分为位置传参和关键字传参。

位置传参是按照位置进行传值(此时,解释器会按照顺序,将实参一 一对应赋值给形参),

关键字传参是按照关键字进行传值(这种传参方式是直接将实参以赋值的方式传给形参,如x=1,y=2)

位置传参的优点是方便,只需一一写出需要传递的实参就行,关键之传参的优点是可以改变参数顺序。

如下:

1     ‘‘‘求两个数字的和,返回两数之和‘‘‘
2     return x+y
3 
4 my_sum(3,2)      #位置传参
5 my_sum(x=3,y=2)  #关键字传参

此外,还有一种参数是默认参数,是指在定义函数的时候,其中一个或者多个参数已经指定了默认值

这种情况下在调用函数进行传参的时候,依然可以传递实参给此形参,如果不传,此参数的值即为默认值,如下:

1 def user_info(name,sex=):
2     ‘‘‘用户信息‘‘‘
3     print(%s的性别是%s%(name,sex))
4 
5 user_info(小明)     #结果为:小明的性别是男生 。不用指定的情况下,默认是男
6 user_info(小花,)#结果是:小花的性别是女。    传参的情况下,会覆盖默认值

 

另外,还有一种特殊的参数,他可以接收任何数量的参数,称为动态参数

  而动态参数又有两种,一种是参数名前加一个星号 " * " 这种参数可以接收不限数量的位置参数,然后组成一个元祖

  另一种是动态参数是参数名前加两个星号 “ ** ”  这种参数可以接收不限数量的关键字参数,然后组成一个字典

  如下:

技术分享图片
1 def func(*args,**kwargs):
2     print(args)
3     print(kwargs)
4 
5 func(1,2,3,a=a,b=b,c=c)
6 #结果为:
7 # (1, 2, 3)
8 # {‘b‘: ‘b‘, ‘c‘: ‘c‘, ‘a‘: ‘a‘}
技术分享图片

需要注意的是:如果一个函数的参数包括:位置参数,默认参数,以及动态参数 *args 和 **kwargs,那么他们的顺序应该是:(位置参数,*args,默认参数,**kwargs)

 

六、作业练习

 

  

技术分享图片
技术分享图片
  1 # 必做题:
  2 # 1、整理函数相关知识点,画思维导图,写博客
  3 # 2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
  4 def func(li):
  5     li1 = []
  6     for i in range(len(li)):
  7         if i % 2 == 1:
  8             li1.append(li[i])
  9     return li1
 10 
 11 l = func([a,b,c,d,e])
 12 print(l)
 13 
 14 # 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
 15 def func1(o):
 16     if len(o) > 5:
 17         return True
 18     else:
 19         return False
 20 print(func1(abc))
 21 print(func1((1,2,3,4,5)))
 22 print(func1([1,2,3,4,5,6,7]))
 23 
 24 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
 25 def func2(l):
 26     if len(l) > 2:
 27         l = l[0:2]
 28     return l
 29 print(func2([a,b,c]))
 30 # 5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
 31 def func3(str):
 32     count_i = 0
 33     count_s = 0
 34     count_sp = 0
 35     count_o = 0
 36 
 37     for i in str:
 38         if i.isdigit():
 39             count_i += 1
 40         elif i.isalpha():
 41             count_s += 1
 42         elif i ==  :
 43             count_sp += 1
 44         else:
 45             count_o += 1
 46     return count_i,count_s,count_sp,count_o
 47 
 48 i,s,sp,o = func3(B e32 \\# ~sd)
 49 print(i,s,sp,o)
 50 # 6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
 51 def func4(s):
 52     if   in s:
 53         return True
 54     else:
 55         return False
 56 print(func4(ab c))
 57 print(func4([a, ,c]))
 58 7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
 59     dic = {"k1": "v1v1", "k2": [11,22,33,44]}
 60     PS:字典中的value只能是字符串或列表
 61 def func5(dic):
 62     dic_new = {}
 63     for k,v in dic.items():
 64         if len(v) > 2:
 65             v_new = v[0:2]
 66         dic_new.update({k:v_new})
 67     return dic_new
 68 dic = {"k1": "v1v1", "k2": [11,22,33,44]}
 69 print(func5(dic))
 70 # 8、写函数,接收两个数字参数,返回比较大的那个数字。
 71 def my_max(x,y):
 72     if x > y:
 73         return x
 74     elif x < y:
 75         return y
 76     else:
 77         return 两者同样大
 78 print(my_max(3,6))
 79 print(my_max(2,2))
 80 
 81 选做题:
 82 9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。
 83 import os
 84 def funx(file,msg):
 85     old_file = file
 86     with open(new_file.txt,w,encoding=utf-8) as new_f:
 87         new_f.write(msg)
 88     os.remove(old_file)
 89     os.rename(new_file.txt,old_file)
 90 funx(test.txt,这是修改后的内容)
 91 # 10、写一个函数完成三次登陆功能,再写一个函数完成注册功能
 92 def func_d():
 93     count = 3
 94     while count > 0:
 95         username = input(请输入您的用户名:).strip()
 96         password = input(请输入您的密码:).strip()
 97         if username == fuyong and password == 123:
 98             print(恭喜,登录成功!)
 99             break
100         else:
101             print(用户名或者密码错误,请重新输入。您还有%s次机会!%(count-1))
102             count -= 1
103             continue
104 
105 def func_z():
106     user_dic = {}
107     username = input(请输入您要注册的用户名:).strip()
108     password = input(请输入您要注册的密码:).strip()
109     user_dic.update({username:password})
110     print(恭喜,注册成功!)
111 func_d()
112 func_z()
113 #
114 # 明日内容:
115 # 函数的动态参数:http://www.cnblogs.com/Eva-J/articles/7125925.html
116 # 函数的进阶内容:http://www.cnblogs.com/Eva-J/articles/7156261.html
117 #
118 # 默写内容:
119 # def my_len(lst):
120 #     count = 0
121 #     for i in lst:
122 #         count+=1
123 #     return count
124 #
125 # l = [1,2,3,4]
126 # len_count = my_len(l)
127 # print(len_count)
128 #
技术分享图片

 











以上是关于python 学习第9天的主要内容,如果未能解决你的问题,请参考以下文章

社区共读《Python编程从入门到实践》第7,8,9天阅读建议

社区共读《Python编程从入门到实践》第7,8,9天阅读建议

补充:第9天python的学习

21天python打卡第9天 基础技能

python学习第n天(bilibili学习日)001

第43天python学习re模块学习