zoukankan      html  css  js  c++  java
  • python函数参数默认值及重要警告

    最有用的形式是对一个或多个参数指定一个默认值。这样创建的函数,可以用比定义时允许的更少的参数调用,比如:

    def ask_ok(prompt, retries=4, reminder='Please try again!'):
        while True:
            ok = input(prompt)
            if ok in ('y', 'ye', 'yes'):
                return True
            if ok in ('n', 'no', 'nop', 'nope'):
                return False
            retries = retries - 1
            if retries < 0:
                raise ValueError('invalid user response')
            print(reminder)

    这个函数可以通过几种方式调用:

    • 只给出必需的参数:ask_ok('Do you really want to quit?')
    • 给出一个可选的参数:ask_ok('OK to overwrite the file?', 2)
    • 或者给出所有的参数:ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

    这个示例还介绍了 in 关键字。它可以测试一个序列是否包含某个值。

    默认值是在 定义过程 中在函数定义处计算的,所以

    i = 5
    
    def f(arg=i):
        print(arg)
    
    i = 6
    f()

    会打印 5

    重要警告: 默认值只会执行一次。这条规则在默认值为可变对象(python列表、字典以及大多数类实例)时很重要。比如,下面的函数会存储在后续调用中传递给它的参数:

    def f(a, L=[]):
        L.append(a)
        return L
    
    print(f(1))
    print(f(2))
    print(f(3))

    这将打印出

    [1]
    [1, 2]
    [1, 2, 3]

    如果你不想要在后续调用之间共享默认值,你可以这样写这个python函数:

    def f(a, L=None):
        if L is None:
            L = []
        L.append(a)
        return L
  • 相关阅读:
    C# 文件重命名
    C# 获取图像文件
    我开通了博客
    C# 图像截取
    C# 从txt读取内容
    Linux 下查看用户组信息
    部署Jenkins完整记录
    一篇文章搞定Java注解^_^
    Java基础之接口
    枚举让盗版美国总统wcc给你整明白哈哈
  • 原文地址:https://www.cnblogs.com/yuanrenxue/p/10696430.html
Copyright © 2011-2022 走看看