1 代码示例
直接上代码。
def kwargs1(a=None, b=None):
"""
先看确定数量的关键字参数。
"""
print(a, b)
"""
怎么调用?
"""
kwargs1("1", "2")
"""
1 2
有人说了,这不是位置参数吗?
还有人说,这不是默认参数吗?
还有人说,确实是用“关键字”方式传入的参数啊?
"""
"""
先看所谓“位置参数”。
kwargs1("1", "2")
上述调用方法,按函数定义中的参数顺序传递值,这是典型的位置参数传递,没问题。
再试试调用时显式指定参数名。
"""
kwargs1(a="1", b="2") # 1 2
kwargs1(b="2", a="1") # 1 2
"""
上述是用“关键字”的方式传入参数,也没问题啊。
再试个新花样:混合调用?
"""
kwargs1("1", b="2") # 1 2
"""
这里a为位置参数,b为关键字参数。
再试个新花样:默认参数?
"""
kwargs1(b=2) # None 2
"""
没给a赋值,但函数定义时a的默认值None也被正确打印出来了。
kwargs1到底是什么函数?算关键字函数吗?
kwargs1不属于“关键字函数”,而是带默认值的形参(默认参数)的函数。
关键字参数(Keyword Arguments)的函数调用时需通过参数名显式指定值进行传递,如:kwargs1(a=1, b=2)。
这是调用方式的概念,与函数定义无关。
默认参数(Default Arguments)的函数定义时为形参赋予默认值(如a=None)。若调用时未传递该参数,则使用默认值。
kwargs1中a=None、b=None属于此类。
"""
"""
正确术语是啥?怎么说才显得自己确实专业?
(正确)带默认值的形参(Default Parameters):
函数定义中为参数赋予默认值(如 a=None)。
(正确)位置参数或关键字参数:
描述调用时的传递方式(由调用者决定)。
(错误)“关键字函数”:
非标准术语,易与变长关键字参数(**kwargs)混淆。
关键结论:
def kwargs1(a=None, b=None) 定义了一个含两个默认参数的函数,它既非“关键字函数”,也非“定数量的关键字函数”,而是通过默认参数实现了灵活调用(位置/关键字均可)的普通函数。若需接收任意关键字参数,必须使用**kwargs语法。
是不是已经晕了?
别晕,实在分不清就别分了,调试的时候不出错、能实现功能就可以,你管他是什么类型的函数或参数呢?不考研就不用纠结这些,考专业硕士不考学术硕士也不用纠结这些。
我们再来个:不定数量字典型关键字参数函数。
"""
def kwargs1(**kwargs):
"""
kwargs是字典,如{'name':'Alice', 'age':25}
不定数量字典型关键字参数,啥意思?你看他用在什么场合就知道了,就是我可能需要你输入一堆数据,但这堆数据到底有多少个,我也不知道,但得允许你把所有可能的数据录入,那就用这个参数形式。加两个星号表示。
"""
print(type(kwargs))
print(kwargs)
for key, value in kwargs.items():
print(f"{key}: {value}")
kwargs1(name="Alice", age=25, city="New York")
"""
<class 'dict'>
{'name': 'Alice', 'age': 25, 'city': 'New York'}
name: Alice
age: 25
city: New York
这只是一个人的信息,还想再写另一个人的,怎么搞?
"""
# kwargs1((name="Alice", age=25, city="New York"), (name="Blice", age=52, city="Old York"))
"""
报错。
invalid syntax。无效语法。
"""
# kwargs1({"name": "Alice", "age": 25, "city": "New York"}, {"name": "Blice", "age": 52, "city": "Old York"})
"""
报错。
kwargs1() takes 0 positional arguments but 2 were given.
啥意思,系统把你kwargs1的参数当成位置参数了,函数本身不接受位置参数,但你给了俩,所以错了。
那怎么提供参数?
"""
kwargs1(p1={"name": "Alice", "age": 25, "city": "New York"}, p2={"name": "Blice", "age": 52, "city": "Old York"})
"""
我们知道kwargs参数本质上是字典,那你就给个字典就好了。
{'p1': {'name': 'Alice', 'age': 25, 'city': 'New York'}, 'p2': {'name': 'Blice',
'age': 52, 'city': 'Old York'}}
上边就是字典套字典,如果需要提取某特定文本,使用JSON解析库就可以了。
p1: {'name': 'Alice', 'age': 25, 'city': 'New York'}
p2: {'name': 'Blice', 'age': 52, 'city': 'Old York'}
接下来看一些组合型参数。
"""
def kwargs2(x, y, **other):
print("x", x)
print("y", y)
print("other", other) # 字典
print("------")
kwargs2(x=3, y=4, what1='pig', what2='let')
# 上边,x和y都是位置参数,但传递参数也可以使用关键字
kwargs2(3, y=4, what1='let', what2='pig')
# 上边,3是位置参数对应x,4是用关键字参数传递的
kwargs2(y=4, x=3, what1='let', what2='pig')
# 上边也没问题哈,把x和y的顺序颠倒了,但用关键字传递的参数,不会混淆。
kwargs2('a', 'b', what1=1, what2=2)
# kwargs2(what1=1, what2=2, 'a', 'b')
# 上边这个不行!为什么不行?位置参数要写在关键字参数前边!
kwargs2(y='a', x='b', what1=1, what2=2)
"""
x 3
y 4
other {'what1': 'pig', 'what2': 'let'}
------
x 3
y 4
other {'what1': 'let', 'what2': 'pig'}
------
x 3
y 4
other {'what1': 'let', 'what2': 'pig'}
------
x a
y b
other {'what1': 1, 'what2': 2}
------
x b
y a
other {'what1': 1, 'what2': 2}
------
"""
"""
根据Python3.8+语法规范(PEP 570),
以def fcn_name(a, b, /, c, d, *, e, f)为例,参数a和b是位置参数,而且是“定数量”的位置参数,必须按位置
传递。传递方法有两种,一种是位置传递,就是直接写3 4这种,还有一种是关键字传递,比如:b=4, a=3,也不是不可以。
参数c和d在“/”后,既可以按位置传递,也可以按关键字传递。
而参数e和f在“*”后,是关键字参数,必须按关键字传递。
"""
def haha(a, b, *args, **kwargs):
print(a, b)
print(args)
print(kwargs)
haha(1, 2, "x", "y", "z", this=1, that=2)
"""
1 2
('x', 'y', 'z')
{'this': 1, 'that': 2}
"""
# haha(b=2, a=1, "x", "y", "z", this=1, that=2)
"""
报错:
haha(b=2, a=1, "x", "y", "z", this=1, that=2)
^
SyntaxError: positional argument follows keyword argument
这里为什么报错?
系统认为你把位置参数放在关键字参数后边了!
"""
"""
核心区别:
*args:
位置参数,接收任意数量参数,无需指定参数名,被Python打包为元组。
简称:不定数量元组型位置参数。
------
**kwargs:
关键字参数,接收任意数量参数,需指定参数名,被Python打包为字典。
简称:不定数量字典型关键字参数。
------
关键字参数要写在位置参数后边!
------
Python函数参数传递核心规则:
位置参数 → *args(可变位置参数) → 关键字参数 → **kwargs(可变关键字参数)
"""
"""
还是那话,别晕,也没必要在理论上搞得特别清楚,测试能完成功能即可。
编程软件的作者也是在不停调整,规则都是人定的,为了方便书写有时候有些东西特别容易混也可以理解。
能用就行,能实现功能就行!!!
"""
2 欢迎纠错
欢迎纠错,随时更新。
联系方式:评论、私信,或 企鹅 :179 0042 182 。
码字不易,如觉得还可以,请给个免费的 zan 和 soucang ,让我有动力继续写下去。
3 免费爬虫
https://affiliate
.bazhuayu
.com
/M8lKUC
4 论文写作/Python 学习智能体
https://chatglm.cn/share/WF2C5ree
-
- 以下关于 Markdown 编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
++ 新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
++ 功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
++ 合理的创建标题,有助于目录的生成
直接输入1次+,并按下space后,将生成1级标题。
输入2次+,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。
++ 如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
++ 插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
++ 如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.
// An highlighted block
var foo = 'bar';
++ 生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
++ 创建一个表格
一个简单的表格是这么创建的:
| 项目 | Value |
|---|---|
| 电脑 | $1600 |
| 手机 | $12 |
| 导管 | $1 |
+++ 设定内容居中、居左、居右
使用:---------:居中
使用:----------居左
使用----------:居右
| 第一列 | 第二列 | 第三列 |
|---|---|---|
| 第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
+++ SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
| TYPE | ASCII | HTML |
|---|---|---|
| Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
| Quotes | "Isn't this fun?" | “Isn’t this fun?” |
| Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
++ 创建一个自定义列表
Markdown
: Text-to-HTML conversion tool
-
Authors
- John
- Luke
++ 如何创建一个注脚
一个具有注脚的文本。2
++ 注释也是必不可少的
Markdown将文本转换为 HTML。
++ KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
++ 新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
++ UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
++ FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
++ 导出与导入
+++ 导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
+++ 导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎

被折叠的 条评论
为什么被折叠?



