zoukankan      html  css  js  c++  java
  • python基础-函数

    函数

    什么是函数

    函数是一种工具,可以重复调用

    为什么要使用函数

    防止代码冗余;不使用函数,代码的可读性差

    如何使用函数

    • 函数的定义

      关键字(def) 函数名(index) 小括号():
      """函数描述:用于描述函数代码体的功能"""

      def index():
          """打印一句话
          :return:
          """
          print("这是一个函数")
      
    • 函数名的命名规范与变量是一样

    • 函数的种类

      • 无参函数

        def index():
            """打印一句话
            :return:
            """
            print("这是一个无参函数")
        
      • 空函数(只有函数名)

        def index():
            pass
        
      • 有参函数

        def login(username,password):
            print(username,password)
        
    • 函数的调用

      • 直接调用

        # 定义register 函数 
        def register():
            """打印姓名,年龄
            :return:
            """
            print("注册用户:
        姓名:dawn
        年龄:37
        ")
        # 直接调用register 函数
        register()
        
      • 定义变量接收

        # 定义register 函数
        def register():
            """打印姓名,年龄
            :return:
            """
            print("注册用户:
        姓名:dawn
        年龄:37
        ")
        # 定义变量res ,给res 赋值为register
        per = register
        # 使用res调用函数
        per()
        
      • 将函数当作参数使用

        # 定义max 函数
        def max(num1,nmu2):
            """
            比较两个数的大小,返回最大数
            :param num1:
            :param nmu2:
            :return: max
            """
            # 如果num1 > num2,那么返回num1,否则返回num2,再将结果赋值给max变量。相当于if…else…的缩写
            max = num1 if num1 > nmu2 else nmu2
            return max
        # 使用了函数嵌套,将max() 当作一个参数再次传入了max() 中
        print(max(187,max(89,233)))
        
    • 函数的返回值

      返回用关键字return表示。return是函数结束的标志,函数体代码只要执行到return,函数执行结束

      函数的返回值分为5种情况:

      • 不写return:也就是没有返回值,默认返回None

        def foo():
            """用于演示没有return的函数
            :return:
            """
            name = "dawn"
            age = 37
        
        print(foo())        # 打印结果:None
        
      • 只写return:只有结束函数体代码的效果,返回None

        def foo():
            """
            用于演示只写return
            :return: None
            """
            for i in range(2):
                while True:
                    i += 1
                    print(i)
                    if i == 1:
                        return
        
        print(foo())		# 打印结果:1和None 1是函数打印出来的记录
        
      • return None:这种情况跟只写return None的效果相同

        def foo():
            """
            用于演示return None
            :return: None
            """
            for i in range(3,0,-1):
                for j in range(i-1,-1,-1):
                    if j == 1:
                        return None
                    print(j)
        
        print(foo()) 		# 打印结果:2和None 2是函数打印出来的记录
        
      • return 单个值:可将返回的结果当作变量或赋值给变量使用

        def foo():
            """
            用于演示return 一个值
            :return: min
            """
            min = 0
            num1 = 123.04
            num2 = 233.333
            min = num1 if num1 < num2 else num2
            return min
        
        print(f"123.04和233.333之间,比较小的是{foo()}")
        
      • return 多个值:将返回的多个值,存入元组中返回(默认),也可自行指定返回的数据类型。存储在元组中,是不想返回值被修改

        # 默认返回元组
        def foo():
            """
            用于演示return 多个值时,默认将多个值存储在元组中返回
            :return: (name,age,hobby,animals)
            """
            name = "dawn"
            age = 37
            hobby = ["study","read","music"]
            animals = {"cat":"星期天","dog":"饭团"}
            return name,age,hobby,animals
        
        print(foo())			# 打印结果元组类型记录:('dawn', 37, ['study', 'read', 'music'], {'cat': '星期天', 'dog': '饭团'})
        
        # 自定义返回值为字典
        def foo1():
            """
            用于演示return 多个值时,设置以字典的形式返回多个值
            :return: {"name":name,"age":age,"hobby":hobby,"animals":animals}
            """
            name = "dawn"
            age = 37
            hobby = ["study", "read"]
            animals = {"cat": "星期天"}
            return {"name":name,"age":age,"hobby":hobby,"animals":animals}
        
        print(foo1())	# 打印结果字典类型:{'name': 'dawn', 'age': 37, 'hobby': ['study', 'read'], 'animals': {'cat': '星期天'}}
        
    • 函数的参数

      类型来讲,参数分为形参实参

      形参:函数定义阶段就规定的参数。相当于定义变量时的变量名

      实参:函数调用阶段传入的参数。相当于赋值给变量的变量值

      # 这里的username 和password 就是形参
      def get_xspar(username,password):
          """
            用于演示形参和实参
          :param username:姓名
            :param 和password:密码
          :return:
            """
          print(f"姓名:{username}	密码:{password}")
          
      # 这里传入login 函数中的"dawn"和"123"就是实参
      get_xspar("dawn","123")
      

      传参方式来说,分为四种。分别是:位置参数、关键字参数、默认参数、可变长参数

      • 位置参数:在调用函数时,直接通过函数中参数列表顺序传参的参数

        def w_par(name,pwd):
                """
                用于演示位置参数
                :param name:姓名
                :param pwd:密码
                :return:
                """
                print(f"用户名:{name}	登录密码:{pwd}")
            w_par("dawn","123")  # "dawn","123"根据参数列表依次传参,就是位置参数
        
      • 关键字参数:在调用函数时,指定参数名进行传参的参数

          def g_par(name,pwd,age):
            """
            用于关键字参数
            :param name:姓名
            :param pwd:密码
            :param age:年龄
            :return:
            """
            print(f"姓名:{name}	密码:{pwd}	年龄:{age}")
        g_par(age=18,name="dawn",pwd="123") # 将值传给指定参数的这种,就是关键字参数
        

        注意:

        位置参数和关键字参数可以混用位置参数一定要在关键字参数之前,混用的时候,不要对同一个形参重复赋值

        def g_par(name,pwd,age):
            """
            用于演示位置参数和关键字参数的混用
            :param name:姓名
            :param pwd:密码
            :param age:年龄
            :return:
            """
            print(f"姓名:{name}	密码:{pwd}	年龄:{age}")
            
        g_par(name="dawn","123",age=18)		# 错误示例,位置参数一定要在关键字参数之前
        g_par("123",name="dawn",age=18)		# 错误示例,程序运行时,默认将"123",name="dawn"都当作参数[name]的值
        g_par("dawn","123",age=18)			# 正确示例
        
      • 默认参数:在定义函数阶段,对形参进行赋值(也就是设置了参数值)的参数。在调用时,如果不对这个参数传值,系统会自动使用默认值;如果对这个参数,重新传了参数,默认值将会被修改请不要将可变类型当作参数传递

        def defult_par(name,age,gender="男"):
            """
            用于演示返回默认值参数
            :param name: 姓名
            :param age: 年龄
            :param gender: 性别,默认值为[男]
            :return:
            """
            print(f"姓名:{name},年龄:{age},性别:{gender}")
        
        defult_par("egon",73)       # 没有传入[gender]参数,打印结果:姓名:egon,年龄:73,性别:男
        defult_par("dawn",37,"女")   # 传了[gender]参数,打印结果:姓名:dawn,年龄:37,性别:女
        
      • 可变长参数:函数中参数列表数量可以不固定

        *args:接收所有溢出的位置参数,接收的值都被存入一个元组中。

        其实,*args 是官方认证的表示,***** 后面的名称可以修改,形参中只要有*就有可变长参数的效果

        def args_par(name,age,*args):
            """
            用于演示*args 的作用
            :param name:姓名
            :param age:年龄
            :param args:溢出参数
            :return:
            """
            print(f"姓名:{name},年龄:{age}。溢出的参数:{args}")
        
        args_par("egon",73)         # 正常输入参数,打印结果:姓名:egon,年龄:73。溢出的参数:()
        args_par("sean",18,"male","烫头")     # 多传了2个参数,打印结果:姓名:sean,年龄:18。溢出的参数:('male', '烫头')
        

        需要注意的是:

        *在形参中表示接收溢出参数,在实参中的表示将容器类型的数据打散。# 函数有几个参数,实参的长度就是几位,否则报错。字典传入的是key值

        def s_par(name,age,str):
            """
            用于演示在实参中,* 表示打算的意思
            :param str: 传入的容器类型数据,str,list,tuple,dict,set
            :return:
            """
            print(name,age,str)
        
        s_par(*"sea")       # 打印结果:s e a
        s_par(*['sean','18','male'])  # 打印结果:sean 18 male
        s_par(*('a',1,'c'))           # 打印结果:a 1 c
        s_par(*{"name":"sean","age":18,"gender":"male"}) # 字典传入的是key 打印结果:name age gender
        s_par(*{'1','a',233})         # 打印结果:a 233 1
        

        ** kwargs:接收所有溢出的关键字参数,接收的值都被存入一个字典中。输出时,直接使用kwargs;如果是 *kwargs,表示打算输出字典中的所有的key值

        def kwargs_par(name,age,**kwargs):
            """
            用于演示**kwargs 的作用
            :param name: 姓名
            :param age: 年龄
            :param kwargs: 溢出的关键字参数字典
            :return:
            """
            print(f"姓名:{name},年龄:{age},溢出的位置参数字典:{kwargs}")
            print(f"打散后的溢出位置参数:",end="")
            print(*kwargs)
            
        kwargs_par(age=18,gender="male",hobby="['study','read']",name="sean")
        # 打印结果:
        # 姓名:sean,年龄:18,溢出的位置参数字典:{'gender': 'male', 'hobby': "['study','read']"}
        # 打散后的溢出位置参数:gender hobby
        
  • 相关阅读:
    2020牛客暑期多校训练营(第一场)I 1or 2题解
    5-23ACM训练题解(NWERC 2019)
    5-20ACM训练题解(2017-2018 ACM-ICPC Pacific Northwest Regional Contest)
    5-6ACM训练题解(2019 Russia Team Open Contest)
    5-2ACM训练题解(Asia Nakhon Pathom Regional Contest)
    4-30ACM训练题解(ICPC Asia Taipei-Hsinchu Contest)
    4-22ACM训练题解(ZOJ Monthly Jan 2019)
    「学习笔记」子序列自动机
    「学习笔记」后缀自动机
    「学习笔记」后缀数组
  • 原文地址:https://www.cnblogs.com/xiaodan1040/p/11829675.html
Copyright © 2011-2022 走看看