Python数据分析:函数定义时的关键字参数。

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编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

++ 功能快捷键

撤销: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.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

++ 如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

++ 生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

++ 创建一个表格
一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

+++ 设定内容居中、居左、居右
使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

+++ SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
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)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

++ 新的甘特图功能,丰富你的文章

2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

++ UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

++ FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

++ 导出与导入

+++ 导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

+++ 导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值