欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python基础学习day9:函数的初识

程序员文章站 2022-06-27 21:32:42
函数的初识 + why:以功能(完成一件事:输入密码、登录、注册、获取长度等)为导向。 一个函数只能封装一个主要功能。具有减少重复代码,可读性高等优点。(可类比len函数) + when:函数可以随时调用 ​这样写,重复代码太多且代码的可读性差 + 对上放代码进行改进,定义一个函数: + how: ......

函数的初识

  • why:以功能(完成一件事:输入密码、登录、注册、获取长度等)为导向。 一个函数只能封装一个主要功能。具有减少重复代码,可读性高等优点。(可类比len函数)
  • when:函数可以随时调用
#假设python没有len函数,请你用代码算出给定任意字符串、列表等的长度,务必请自己编写一下,参考如下:

s1 = 'asdfghjkl'
len = 0
for i in s1:    #当要遍历一个可迭代对象时经常用for
    len += 1
print(len)   #9


len = 0
l1 = [1,2,3,4,5,6,7]
for i in l1:
    len += 1
print(len)    #7

​ 这样写,重复代码太多且代码的可读性差

  • 对上放代码进行改进,定义一个函数:

    def my_len(s):
        len = 0
        for i in s:
            len += 1
        print(len)
    
    
    #测字符串/列表的长度:
    s1 = 'asdfghjkl'
    my_len(s1)         #9
    l1 = [1,2,3,4,5,6,7]
    my_len(l1)         #7
  • how:函数以def定义后再加一个空格再加上函数名(取的函数名最好具有描述性)再加上一个英文冒号,示例如下:

    def hanshu():  #def 函数名():
        pass       #    函数主题
        return 返回值           #    return    返回值,可有可无
    • 函数名与变量设置相同,一般以驼峰命名法(hanshu、hanshu、hanshu),函数名后一定要加()和:
    • 函数体中最好不要写print(),函数体向前缩进一个tab
    • 当编写的代码中包含 函数名() 后,函数会被执行。
    • 函数的返回值return: 在函数中遇到return直接结束函数的调用;并给函数外部返回一个返回值,将数据返回给函数的执行者、调用者。返回值可被print打印出,若无返回值,print会打印出none。
    • return可返回多个值,会以元祖的形式将多个元素返回给函数的执行者。(元祖可以进行拆包)
  • 函数的传参:让函数封装的这个功能变为动态可传入的(盘活)。参数分为实参和形参

    • 实参:函数的执行时传入的参数

    • 形参:函数的定义时接受的参数

      def func(a):  #a:形参,定义函数时定义的参数,若定义了形参,则调用函数时必须向函数传入                实参。(特殊情况后文再说)
          a += 1
          return a
      print(func(6))   #调用函数  6:传入的实参。
      >>>7
    • 实参角度:

      • 位置参数:按照实参位置参数与形参的对应顺序(从左到右)依次传入。

        def func(a,b):
            c = a / b
            return c
        print(func(10,2))
        >>>5.0      #只要运算符中有除法,得出来的答案都是浮点数
      • 关键字参数:当形参过多时,需要将实参传入的顺序记住,容易出错。关键字参数无需顺序

        def func(name,sex,hight,weight):
            c = '我叫{},性别{},体重是{},身高{}'.formt(name,sex,weight,hight)
            return r
        print(func('山就在那儿','男','60kg','1.7m'))       #python默认从左至右将实参传给形参,当形参过多时容易出错,但可以使用关键字参数传入。
        >>>我叫山就在那儿,性别男,体重是1.7m,身高60kg
        
        print(func(name='山就在那儿',sex='男',weight='60kg',hight='1.7m'))  
        >>>我叫山就在那儿,性别男,体重是60kg,身高1.7m
      • 混合传参:位置参数一定要放在关键字参数前方,关键字参数一定要放在位置参数后面。否则会报错。

        def func(name,sex,hight,weight):
            c = '我叫{},性别{},体重是{},身高{}'.formt(name,sex,weight,hight)
            return r
        print(func('山就在那儿','男',weight='60kg',hight='1.7m')) 
        >>>我叫山就在那儿,性别男,体重是60kg,身高1.7m
      • 知识点补充:三元运算符:简单的if-else语句可以简化为三元运算符。

    #判断a,b的大小
    a = 10
    b = 11
    c = a if a>b else b
    print(c)    11
    
    #c = a if a>b else b  等同于:
    if a>b:
        c = a
    else:
        c = b
    #定义一个函数:能为函数传入两个参数,打印出两个参数中最大的一个参数
    def complie(a,b):
        c = a if a>b else b
        return c
    print(complie(11,10))
    >>>11
    
    #编码进阶:
    def complie(a,b):
        return a if a>b else b    #return的为c,因此可以将两个c合并,并省去参数c
    print(complie(11,10))
    • 形参角度:

      • 位置参数:形参位置参数必须与实参一一对应,与实参位置参数一样,只是观察角度不同,不再多叙述。

      • 默认参数(默认值参数):若有位置参数,默认参数一定要在位置参数后面,默认参数可以被更改。可参考open函数的默认参数。

      • 实参与形参必须一一对应,不可一对多或者多对一,否则会报错。建议读者自测一遍。

        def func(a,b,c=10):
            d = (a + b)/c
            return d
        print(func(9,1))
        >>>1
        
        print(func(5,3,c=2))
        >>>4
        print(func(5,3,2))    #实参传入默认参数时关键字可以不写,但不推荐此方法。
        >>>4
      • 还有两种形参类型,请看明天的python基础学习day10