python基础-函数

  • 2019 年 11 月 10 日
  • 筆記

函数

什么是函数

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

为什么要使用函数

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

如何使用函数

  • 函数的定义

    关键字(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("注册用户:n姓名:dawnn年龄:37n")  # 直接调用register 函数  register()
    • 定义变量接收

      # 定义register 函数  def register():      """打印姓名,年龄      :return:      """      print("注册用户:n姓名:dawnn年龄:37n")  # 定义变量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}t密码:{password}")    # 这里传入login 函数中的"dawn"和"123"就是实参  get_xspar("dawn","123")

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

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

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

        def g_par(name,pwd,age):      """      用于关键字参数      :param name:姓名      :param pwd:密码      :param age:年龄      :return:      """      print(f"姓名:{name}t密码:{pwd}t年龄:{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}t密码:{pwd}t年龄:{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