Python自学12(函数进阶)

Python自学12(函数进阶)_第1张图片
" 天地间此女最恨最恶最该杀、天地间此女最柔最慧最应怜 "

把盒子升级为豪宅:函数进阶

  • 1、位置参数
  • 2、参数默认值
  • 3、关键字参数
  • 4、任意参数列表
  • 5、多返回值

1、位置参数

  1. 位置参数、顾名思义、传入函数时每个参数都是通过位置来作区分的
  2. 函数调用时、传入的值需按照位置与参数对应
def overspeed_rate(current, max, min):
    if current > max:
        return (current - max) / max    # 超过最大时速,结果为正
    elif current < min:
        return (current - min) / min    # 超过最小时速,结果为负
    else:
        return 0                        # 不超速,结果为 0

print(overspeed_rate(120,90,60))
# output:0.3333333333333333

# 1. 这个函数用来判断车辆在高速上行驶时超速的比例
# 2. 它接受三个参数、current 表示当前时速
# 3. max 参数表示当前路段的允许的最大时速、min 表示所允许的最小时速

2、参数默认值

  1. 前面的函数中、如果最大时速和最小时速比较固定
  2. 那么每次函数调用时都输入这个两个参数就显得有些繁琐
  3. 这时我们可以使用参数默认值
  4. 参数默认值也就是给参数设置默认值、之后函数调用时便可以不传入这个参
  5. Python 自动以默认值来填充参数
  6. 如果一个有默认值的参数依然被传入了值、那么默认值将会被覆盖
# 语法
def 函数(参数1, 参数2=默认值):
    pass

%1
def overspeed_rate(current, max=120, min=90):
    if current > max:
        return (current - max) / max
    elif current < min:
        return (current - min) / min
    else:
        return 0
        # 不超速,结果为 0

print(overspeed_rate(150))
# output:0.25

3、关键字参数

  1. 对于 overspeed_rate 函数、我们还可以在函数调用时
  2. 以 参数名=值 的形式来向指定的参数传入值
# 在调用函数时以 参数名=值 指明要传递的参数
# 这种以关键字的形式来使用的参数叫做关键字参数
%1
overspeed_rate(100, min=80)

%2
overspeed_rate(current=100, min=80)

%3
overspeed_rate(current=100, max=100, min=80)

%4
# 使用关键字时甚至可以打乱参数传递次序:
overspeed_rate(min=80, max=100, current=100)

%4
# 关键字参数需要出现在位置参数之后、否则将抛出 SyntaxError 异常
overspeed_rate(100, max=100, 80)

4、任意参数列表

  1. 定义函数时、在参数列表中使用 **参数名
  2. 可以接收一切关键字参数
  3. 类似的、参数列表中使用 *参数名
  4. 就可以接受任意数量的非关键字参数、也就是可变参数
%1  *参数名
# 计算任意个数的乘积
def multiply(*nums):
    result = 1
    print(nums)
    # nums 为一个元组
    print(*nums)
    # *nums 存储了多个元素
    for n in nums:
        result *= n
    return result
print(multiply(1,2,3,4,5))
# output:(1, 2, 3, 4, 5)
#        1,2,3,4,5
#        120

# 这个函数能接收任意个参数、这正是 *nums 所发挥的作用
# 函数所有接收到的非关键字参数组装成一个元组、并绑定到 nums 上

%2 **参数名
#  输入并打印数据
def echo(string, **keywords):
    print(string)
    print(keywords)
    # keywords 成为一个字典来存储传递的变量
    for kw in keywords:
        print(kw, ":", keywords[kw])

echo('hello', today = '2021-02-08', content = 'function', section = 3.6)
# output:hello
#        {'today': '2021-02-08', 'content': 'function', 'section': 3.6}
#        today : 2021-02-08
#        content : function
#        section : 3.6

5、多返回值

  1. 典型情况下、函数只有一个返回值、但是 Python 也支持函数返回多个返回值
  2. 要返回多个返回值、只需在 return 关键字后跟多个值(依次用逗号分隔)
def date():
    import datetime
    d = datetime.date.today()
    return d.year, d.month, d.day

year,month,day = date()
# 也可以用多个变量来接收返回值
print(date())
# 输出函数的返回值
print(year)
print(month)
print(day)
# 依次输出用变量接收后的返回值
# output:(2021, 2, 8)
#         2021
#         2
#         8

# 其实多返回值时、Python 将这些返回值包装成了元组、然后将元组返回
# 接收返回值时、year, month, day = date()
# 这样赋值写法、会将元组解包、分别将元素赋予单独的变量中

你可能感兴趣的:(Python自学,列表,python,动态规划)