函数第二部分:动态参数是自由主义的体现-Python基础前传(11)

简介: 编程语言就是大家一起定个规则大家一起玩。规则是人定的,但也是定给人的。我们之前学习函数的参数,都遵循着一个原则就是:形式参数有几个,实际参数就只能传几个;我们从开发 python 这门编程语言的角度思考,我们要是真的就是规定形式参数有几个,实际参数就有几个的原则,是不是不能满足实际工作需要,在实际工作中谁又能保证每一次都预先设定好参数的个数呢?这个时候,作为编程语言的设计人员,就会引进动态参数,我们想想如果不引入动态参数,谁还能使用这个编程语言呢。

编程语言就是大家一起定个规则大家一起玩。规则是人定的,但也是定给人的。
我们之前学习函数的参数,都遵循着一个原则就是:形式参数有几个,实际参数就只能传几个;我们从开发 python 这门编程语言的角度思考,我们要是真的就是规定形式参数有几个,实际参数就有几个的原则,是不是不能满足实际工作需要,在实际工作中谁又能保证每一次都预先设定好参数的个数呢?这个时候,作为编程语言的设计人员,就会引进动态参数,我们想想如果不引入动态参数,谁还能使用这个编程语言呢。

(一)动态参数1-一个星号变元组

  • 动态参数存在的意义?

    • 函数的作者有时候也不知道这个函数到底需要多少个参数,这时候动态参数就有存在的意义了

  • 动态参数创建-加 *

    • 底层原理是:把数值型或其他数据类型变成了元组类型,是元组了就可以多加实际参数了(一个星号变元组,传的参数就是元组的元素)

#不用动态参数
def f1(a):
print(a,type(a))
f1(123)
>>> 123 <class'int'>

#使用动态参数
def f1(*a):
print(a,type(a))
f1(123456789)
>>> (123,456,789) <class'tuple'>
f1(123,[11,22,33],{"key1":"values2"})
>>>(123,[11,22,33],{"k1":"values2"}) <class 'tuple'>

(二)动态参数2-两个星号变字典

def f1(**a):
print(a,type(a))
f1(k1=123,k2=456)

>>>{'k1':123,'k2':456} <class 'dict'>

说到这里,大家有没有注意到一个问题:就是动态1(1个星号)是元组只能是元组,动态2(2个星号)是字典只能是字典,我们有没有什么办法,将动态1和动态2组合起来,让我们参数既可以是元组,又可以是字典呢?

def f1(*a,**aa):
print(a,type(a))
print(aa, type(aa))
f1(11,22,33,k1=123,k2=456)
>>>(11, 22, 33) <class 'tuple'>
>>>{'k1': 123, 'k2': 456} <class 'dict'>
  • 这里 jacky 要给大家强调的是:*a 一定要放在 **a 前面,顺序不能颠倒,这是固定写法

(三)动态参数的规范书写

  • 一般情况下,把动态参数设置成如下规范形式

#  *args,  **kwargs
def f1(*args,**kwargs` )
  • 为动态参数传入列表、字典、元组

def f1(*args):
print(args,type(args))
li = [11,22,33]
f1(li)
f1(*li) #加*相当于for循环遍历了列表里的元素

>>>([11,22,33],)<class 'tuple'>
>>>(11,22,33)<class 'tuple'>

def f1(**kwargs):
print(kwargs,type(kwargs))
dic = {"k1":123}
f1(k1=dic)
f1(**dic)

>>>{'k1':{'k1':123}}<class 'dict'>
>>> {'k1':123}<class 'dict'>
目录
相关文章
|
5天前
|
Python
python函数的参数学习
学习Python函数参数涉及五个方面:1) 位置参数按顺序传递,如`func(1, 2, 3)`;2) 关键字参数通过名称传值,如`func(a=1, b=2, c=3)`;3) 默认参数设定默认值,如`func(a, b, c=0)`;4) 可变参数用*和**接收任意数量的位置和关键字参数,如`func(1, 2, 3, a=4, b=5, c=6)`;5) 参数组合结合不同类型的参数,如`func(1, 2, 3, a=4, b=5, c=6)`。
10 1
|
1天前
|
Python
python学习4-内置函数range()、循环结构、循环控制语句、else语句、嵌套循环
python学习4-内置函数range()、循环结构、循环控制语句、else语句、嵌套循环
|
4天前
|
测试技术 开发者 Python
Python中的装饰器:优雅而强大的函数修饰工具
在Python编程中,装饰器是一种强大的工具,用于修改函数或方法的行为。本文将深入探讨Python中装饰器的概念、用法和实际应用,以及如何利用装饰器实现代码的优雅和高效。
|
9天前
|
Python
Python函数学习应用案例详解
学习Python函数的应用,包括计算两数之和、判断偶数、计算阶乘、生成斐波那契数列及反转字符串。示例代码展示了函数接收参数和返回结果的功能,如`add(a, b)`求和,`is_even(num)`判断偶数,`factorial(n)`计算阶乘,`fibonacci(n)`生成斐波那契数,以及`reverse_string(s)`反转字符串。
11 1
|
9天前
|
Python
python基础篇:什么是函数?函数有什么用?
python基础篇:什么是函数?函数有什么用?
23 3
|
13天前
|
安全 Python
Python中input()函数
【4月更文挑战第3天】,`input()` 是 Python 内建函数,用于从控制台获取用户输入。它会暂停程序并显示提示信息(如果提供),用户输入的内容被视为字符串返回。基本语法是 `variable = input(prompt)`,其中 `prompt` 是可选提示信息。例如,`name = input("请输入您的姓名:")` 后,程序会等待用户输入,然后将输入的字符串赋值给 `name`。注意 `input()` 总是返回字符串,需手动转换为其他类型,且避免使用 `eval()` 处理用户输入以防止安全风险。
21 2
Python中input()函数
|
13天前
|
Java C语言 C++
【Python】5. 基础语法(3) -- 函数篇
【Python】5. 基础语法(3) -- 函数篇
23 1
|
14天前
|
程序员 Python 容器
Python中的函数
【4月更文挑战第2天】,Python函数:代码复用的关键,通过`def`定义,接受参数,返回结果。内置如`len()`、`print()`,自定义函数满足特定需求。`lambda`用于快速小功能,参数多样,支持默认和可变。装饰器扩展功能,不改原代码。高阶函数处理其他函数。函数促进DRY原则,增强代码组织和可读性。
14 2
Python中的函数
|
19天前
|
Python
Python内置函数map、split、join讲解
Python内置函数map、split、join讲解
29 0
|
7月前
|
C++ Python
Python函数参数传递:传值还是传引用
Python函数参数传递:传值还是传引用
38 0