zoukankan      html  css  js  c++  java
  • python基础===函数的几个要点

    函数

    可接受任意数量参数的函数

    位置参数   和  关键字参数

    为了能让一个函数接受任意数量的位置参数,可以使用一个*参数.

    def avg(first, *r):
        return (first + sum(r)) / (1 + len(r))
    
    print(avg(1,2,3,4,5,6))   #3.5

    为了接受任意数量的关键字参数,使用一个以**开头的参数。比如:

    def make_element(x, **a):
        key = ['%s = "%s" ' % item for item in a.items()]
        key1 = ' '.join(key)
        print(key1)
    
    make_element(10, c =2,b =5,f= 20)       #c = "2"  b = "5"  f = "20" 

    注意:

    一个*参数只能出现在函数定义中最后一个位置参数后面,而 **参数只能出现在最后一个参数。 有一点要注意的是,在*参数后面仍然可以定义其他参数。

    def a(x, *args, y):
        pass
    
    def b(x, *args, y, **kwargs):
        pass

     

    返回多个值的函数

    为了能返回多个值,函数直接return一个元组就行了。例如:

    def add(x:int,y:int):
        return x, y, x+y
    
    a, b, c = add(1, 2)
    print(a)
    print(c)

    函数返回的结果是一个元组,然后给a, b, c赋值

    默认参数

    默认参数的值应该是不可变的对象,比如None、True、False、数字或字符串。 特别的,千万不要像下面这样写代码:

    def spam(a, b=[]): # NO!
        ...

    因为会出现这样的错误:

    >>> def spam(a, b=[]):
    ...     print(b)
    ...     return b
    ...
    >>> x = spam(1)
    >>> x
    []
    >>> x.append(99)
    >>> x.append('Yow!')
    >>> x
    [99, 'Yow!']
    >>> spam(1) # Modified list gets returned!
    [99, 'Yow!']
    >>>

    在测试None值时使用 is 操作符是很重要的,也是这种方案的关键点。因此应该这样写:

    def spam(a, b=None):
        if b is None:
            b = []
        ...

    减少可调用对象的参数个数

    如果需要减少某个函数的参数个数,你可以使用 functools.partial()partial() 函数允许你给一个或多个参数设置固定的值,减少接下来被调用时的参数个数。 为了演示清楚,假设你有下面这样的函数:

    def spam(a, b, c, d):
        print(a, b, c, d)
    >>> from functools import partial
    >>> s1 = partial(spam, 1) # a = 1
    >>> s1(2, 3, 4)
    1 2 3 4
    >>> s1(4, 5, 6)
    1 4 5 6
    >>> s2 = partial(spam, d=42) # d = 42
    >>> s2(1, 2, 3)
    1 2 3 42
    >>> s2(4, 5, 5)
    4 5 5 42
    >>> s3 = partial(spam, 1, 2, d=42) # a = 1, b = 2, d = 42
    >>> s3(3)
    1 2 3 42
    >>> s3(4)
    1 2 4 42
    >>> s3(5)
    1 2 5 42
    >>>

    可以看出 partial() 固定某些参数并返回一个新的callable对象。这个新的callable接受未赋值的参数, 然后跟之前已经赋值过的参数合并起来,最后将所有参数传递给原始函数。

  • 相关阅读:
    77、Android设置虚线、圆角、渐变
    c# 制作自定义控件并生成dll文件旷展到其他项目使用
    VB ListView罗列图片
    (壹)、java面向对象详解
    php基本语法
    1.单例模式
    Memcached详解
    MySql的优化
    页面静态化详解
    mysql常用知识点
  • 原文地址:https://www.cnblogs.com/botoo/p/8665027.html
Copyright © 2011-2022 走看看