zoukankan      html  css  js  c++  java
  • python笔记六(函数的参数、返回值)

    一 调用函数

    在写函数之前,我们先尝试调用现有的函数

    >>> abs(-9)
    9

    除此之外,还有我们之前使用的len()等。可以用于数据类型转换的 int() float() str() bool()等函数。还有一些可以直接只用的内置函数等。

    二、函数名称、参数、返回值

      在写函数的时候,只需要定义定义函数的名称,参数即可,不必和java一样,定义返回值的类型,且在写参数的时候,不用指定参数的类型;

      return 返回值也更加奔放,可以返回任意类型的数据;例如 数值,列表,字典,甚至是函数。

    复制代码
    >>> def out_list(a,b):
    ...     l = []
    ...     l.append(a)
    ...     l.append(b)
    ...     return l
    ...
    >>> m = out_list(1,2)
    >>> type(m)
    <class 'list'>
    复制代码

      参数详解:位置参数/默认参数/可变参数/关键字参数/参数组合

      位置参数

      如上例中,调用out_list(1,2)我们默认的就把1和2的位置对应于a和b,也相当于out_list(a=1,b=2)

      默认参数

      默认参数我们可以理解为一个公共的参数值,在调用的时候这个值都是固定的,当然我们也可以对其进行修改

    复制代码
    >>> def student(name,age,city):
    ...     print(name)
    ...     print(age)
    ...     print(city)

     >>> student("nadech",22,"NANJIGN")
     nadech

     22

     NANJIGN

    复制代码

      以上例子中,如果要调用函数的student都来自NANJING,那么我们就可以把这个参数设置为默认参数。

    复制代码
    >>> def student(name,age,city="NANJING"):
    ...     print(name)
    ...     print(age)
    ...     print(city)
    ...
    >>> student("nadech",22)
    nadech
    22
    NANJING
    复制代码

      但是在使用默认参数的时候要注意,默认参数必须指向不可变对象。

    复制代码
    >>> def enroll(l=[]):
    ...     l.append("END")
    ...     return l
    ...
    >>> enroll()
    ['END']
    >>> enroll()
    ['END', 'END']
    >>> enroll()
    ['END', 'END', 'END']
    复制代码

       可变参数 *args 顾名思义,就是参数的个数可以改变

    复制代码
    def cacutlate (*args):
        sum = 0
        for i in args:
            sum+=i*i
        print(sum)
    # 直接输入多个参数
    cacutlate(1,2,3)
    
    # 直接把列表传入,这样就会把l列表中的元素挨个传入
    l = [1,2,3,4]
    cacutlate(*l)
    复制代码

       关键字参数 **kwargs,使用时我们要与可变参数区分开来,可变参数是只传入参数本身,而关键字参数需要参数名称以及参数值,在函数内部会组装为字典

    复制代码
    >>> def user(name,password,**kwargs):
    ...     print("name:",name,"password:",password,"others:",kwargs)
    ...
    >>> user("nadech",123)
    name: nadech password: 123 others: {}
    >>> user("nadech",123,date="12-12")
    name: nadech password: 123 others: {'date': '12-12'}

     >>> info = {"date":"12-12","job":"student"}
     >>> user("nadech",123,**info)
     name: nadech password: 123 others: {'job': 'student', 'date': '12-12'}

    复制代码

      关键字参数可以使我们来扩展函数的功能,例如用户在注册信息的时候,我们要求用户名和密码都是必须的,至于其他年龄,地址等则不是必要的,那么我们就可以在创建该函数的时候,使用关键字参数扩展需求。

      如果进一步的,我们需要限制关键字参数的名称,也就是允许的关键字参数有所限制,例如只能出现在(年龄、住址、薪酬等)就需要使用命名关键字参数。

      命名关键字参数

      在命名关键字参数的时候有以下两种情况:

      ①参数列表中已经存在可变参数,也就是*args,那么我们就只需要在后边加上命名关键字的名称

    # 命名关键字参数
    def user(name,password,*args,age,address):
        print("name:",name,"password:",password,args,age,address)
    
    user("nadech",123,"v1","v2","v3",age=22,address="NANJING")

      ②参数列表中不存在可变参数,需要用 *,来识别命名关键字参数

    def user(name,password,*,age,address):
        print("name:",name,"password:",password,age,address)
    
    user("nadech",123,age=22,address="NANJING")

      参数组合

    在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

    def f1(a, b, c=0, *args, **kw):  #位置参数/默认参数/可变参数/关键字参数
        print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
    
    def f2(a, b, c=0, *, d, **kw):  #位置参数/默认参数/命名关键字参数/关键字参数
        print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
  • 相关阅读:
    Python 图片识别
    Python发送邮件
    python argparse模块的使用
    datetime中时间的formatter整理
    redis持久化那些事(kēng)儿
    用python自建一个DNS服务器
    从windows到linux的换行转换工具dos2unix
    pypy入门:pypy的安装及使用介绍
    LRU缓存算法与pylru
    用python实现矩阵转置
  • 原文地址:https://www.cnblogs.com/jjchi/p/9719687.html
Copyright © 2011-2022 走看看