Python学习札记(十三) Function3 函数参数二

参考:函数参数

Note

A.关键字参数:

1.关键字参数:**kw

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

2.支持只传入必选参数;也可以传入任意数目的可选参数,如下例。

eg.

#!/usr/bin/env python3def my_func(name, age, **kw) :print('name:', name, 'age:', age, 'else:', kw)

test

>>> from function3 import my_func>>> my_func('Chen', 20)
name: Chen age: 20 else: {}>>> my_func('Chen', 20, prof='Student')
name: Chen age: 20 else: {'prof': 'Student'}>>> my_func('Chen', 20, prof='Student', city='FuZhou')
name: Chen age: 20 else: {'prof': 'Student', 'city': 'FuZhou'}

3.关键字参数的作用:”试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。“

4.当然,也可以选择在传入参数的时候直接传入一个dict的内容。这里容易出错,我就翻车了。

eg.

>>> dic = {'prof' : 'Student', 'city' : 'FuZhou'}
>>> my_func('Chen', 20, dic['prof'], dic['city'])
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: my_func() takes 2 positional arguments but 4 were given>>> my_func('Chen', 20, dic)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: my_func() takes 2 positional arguments but 3 were given

第一句错误的原因,是因为传入dic['prof']相当于传入'Student',即一个字符串,这很明显与函数定义的参数不符;第二句同上,只不过由传入字符串变成了传入一个dict。

正确的方法应该是value_name=dict[key]

eg.

>>> my_func('Chen', 20, prof=dic['prof'])
name: Chen age: 20 else: {'prof': 'Student'}>>> my_func('Chen', 20, prof=dic['prof'], city=dic['city'])
name: Chen age: 20 else: {'prof': 'Student', 'city': 'FuZhou'}

5.如果想直接传入dict,方法也很简单,加上两个星号*

刚才的错误:

>>> my_func('Chen', 20, dic)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: my_func() takes 2 positional arguments but 3 were given

修正:

>>> my_func('Chen', 20, **dic)
name: Chen age: 20 else: {'prof': 'Student', 'city': 'FuZhou'}

**dic表示把dic这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是dic的一份拷贝,对kw的改动不会影响到函数外的dic。

B.命名关键字参数

1.定义了关键字参数的函数允许用户传入多个关键字key-value值,如果我们想要在函数里面查看一个key是否在传入的dict中,可以通过if···in···的方法查看。

eg.

#!/usr/bin/env python3def my_func(name, age, **kw) :if 'prof' in kw :            # Hint: 'prof' => ''print('prof in')if 'city' in kw :print('city in')print('name:', name, 'age:', age, 'else:', kw)

output

>>> from function3 import my_func
>>> dic = {'prof' : 'Student', 'city' : 'FuZhou'}
>>> my_func('Chen', 20, **dic)
prof in
city in
name: Chen age: 20 else: {'city': 'FuZhou', 'prof': 'Student'}
>>> 

2.如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和prof作为关键字参数。

方法:

my_func(name, age, *, prof, city)

*作为分隔符,指定传入的关键字参数key必须是prof和city。

使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺少*,Python解释器将无法识别位置参数和命名关键字参数。

eg.

def my_func2(name, age, *, prof, city) :print(name, age, prof, city)

output

>>> from function3 import my_func2
>>> my_func2('Chen', 20, prof='Student', city='FuZhou')
Chen 20 Student FuZhou

注意:指定了关键字参数的key之后,传入的关键字参数数目必须匹配,并且必须是 key=value 的形式。

命名关键字参数必须传入参数名。

eg.

>>> my_func2('Chen', 20, prof='Student')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: my_func2() missing 1 required keyword-only argument: 'city'>>> my_func2('Chen', 20)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: my_func2() missing 2 required keyword-only arguments: 'prof' and 'city'
>>> my_func2('Chen', 20, 'Student', 'FuZhou')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: my_func2() takes 2 positional arguments but 4 were given

3.命名关键字支持默认参数,在调用时,可以不传入默认参数的值。

C.参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数(*[···] or *list_name)、命名关键字参数和关键字参数(**{···} or **dict_name)。

eg.

def my_func3(a, b, c=0, *d, **e) :print(a, b, c, d, e)

output

>>> my_func3('Chen', 20)
Chen 20 0 () {}>>> my_func3('Chen', 20, 100)
Chen 20 100 () {}>>> my_func3('Chen', 20, 100, *['Li', 'Wang'], **{'Li' : 'num1', 'Wang' : 'num2'})
Chen 20 100 ('Li', 'Wang') {'Wang': 'num2', 'Li': 'num1'}>>> 

在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。

也就出现了原文传入一个tuple和一个dict,解释器也正常输出的情况:

>>> t1 = ('Li', 100, 99, 'Wang')>>> d1 = {'Wang' : 'num2', 'Li' : 'num1'}>>> my_func3(*t1, **d1)
Li 100 99 ('Wang',) {'Wang': 'num2', 'Li': 'num1'}>>> t2 = ('Li', 100, 'Wang')>>> my_func3(*t2, **d1)
Li 100 Wang () {'Wang': 'num2', 'Li': 'num1'}        # 按位置解释>>> t3 = ['Li', 100, 'Wang']>>> my_func3(*t3, **d1)
Li 100 Wang () {'Wang': 'num2', 'Li': 'num1'}        # 传入一个list和一个tuple也可以>>> 

2017/1/31

转载于:https://www.cnblogs.com/qq952693358/p/6359044.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频操作_02视频追踪:meanshift算法+Camshift算法

1.meanshift 1.1原理 meanshift算法的原理很简单。假设你有一堆点集&#xff0c;还有一个小的窗口&#xff0c;这个窗口可能是圆形的&#xff0c;现在你可能要移动这个窗口到点集密度最大的区域当中。 如下图&#xff1a; 最开始的窗口是蓝色圆环的区域&#xff0c;命名为C1…

数据结构之图:图的搜索,Python代码实现——23

图的搜索 深度优先搜索(Depth First Search) 定义 从例子出发理解 DFS是一种用于遍历或搜寻树类或图类数据结构的算法&#xff0c;这种算法从根结点出发&#xff08;如果是图&#xff0c;则任意选择一个顶点作为根结点&#xff09;&#xff0c;在回溯之前会尽可能地遍历每一…

dynamic_debug动态打印kernel日志

1、修改代码如下: --- a/kernel/drivers/gosodrv/touchscreen/ft5x06_ts.c+++ b/kernel/drivers/gosodrv/touchscreen/ft5x06_ts.c @@ -402,6 +402,7 @@ static void ft5x0x_ts_pen_irq_work(struct work_struct *work)struct ft5x06_ts_data *data = container_of(work, str…

PythonR语言-python和r相遇

前言 如果你是数据分析领域的新兵&#xff0c;那么你一定很难抉择——在进行数据分析时&#xff0c;到底应该使用哪个语言&#xff0c;R还是Python&#xff1f;在网络上&#xff0c;也经常出现诸如“我想学习机器语言&#xff0c;我应该用哪个编程语言”或者“我想快速解决问题…

人脸识别案例:【实战】opencv人脸检测+Haar特征分类器

1 基础 我们使用机器学习的方法完成人脸检测&#xff0c;首先需要大量的正样本图像&#xff08;面部图像&#xff09;和负样本图像&#xff08;不含面部的图像&#xff09;来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用&#xff0c;就像我们的卷积核&…

Android input 子设备adb 调试命令

adb shell getevent 查看input设备属于哪一个event adb shell getevent dev/input/event1 与input event 对应的信息 rootandroid:/ # cat/proc/bus/input/devices 查看TP上报的速率&#xff1a; getevent -r /dev/input/event1 查看TP上报的键值&#xff1a;getevent -l…

数据结构之图:用图解决案例,Python代码实现——24

用图解决畅通工程案例与途径查找 代码中需要引入的类方法代码链接&#xff1a; 无向图Undigraph深度优先搜索DFS与广度优先搜索BFS 畅通工程-续 介绍 案例和之前并查集中实现的一样&#xff0c;但问题略有改动&#xff0c;需要判断9-10城市是否相通&#xff0c;9-8城市是否…

【在虚拟环境下完美解决】1698: error: (-215:Assertion failed) empty() in function cv::CascadeClassifier

问题描述 官方文档做的Demo发现遇到了错误提示如下&#xff1a; error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’ 错误的原因&#xff1a; 出现 error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassif…

在线生成大全(这里真的什么都有)

粉丝身份证&#xff1a;http://id.igogo8.com/ 制作印章&#xff1a;http://www.makepic.com/print.php 邮址图片生成&#xff1a;http://www.makepic.com/email.php条形码生成&#xff1a;http://www.makepic.com/barcode.phpKiss学堂 颁发结业证&#xff1a;http://www.makep…

Git 忽略一些文件的提交

首先 git init 初始化一个git 代码仓库 git add . 向这个仓库提东西 git config --global core.excludesfile .gitignore 用.gitignore 这个文件来忽略不比较的内容 vi .gitignore /Music/res/对这个文件下的内容不进行比较然后还要 git rm --cached /Music/res/* -r …

计算机视觉概述:视觉任务+场景领域+发展历程+典型任务

一、什么是计算机视觉 定义&#xff1a;计算机视觉&#xff08;Computer vision&#xff09;是⼀⻔研究如何使机器“看”的科学&#xff0c;更 进⼀步的说&#xff0c;就是指⽤摄影机和计算机代替⼈眼对⽬标进⾏识别、跟踪和测量 等&#xff0c;⽤计算机处理成为更适合⼈眼观察…

数据结构之图:有向图的介绍与实现,Python代码实现——25

有向图的介绍 引入 在实际生活中,很多应用相关的图都是有方向性的,最直观的就是网络,可以从A页面通过链接跳转到B页面,那么a和b连接的方向是a->b,但不能说是b->a,此时我们就需要使用有向图来解决这一类问题,它和我们之前学习的无向图,最大的区别就在于连接是具有方向的…

Linux加载vmlinux调试

使用gdb加载内核符号表 arm-eabi-gdb out/target/product/msm8625/obj/KERNEL_OBJ/vmlinux 在内核的.config里面要打开 DEBUG_INFO和DEBUG_VM 定位故障代码 (gdb) l * qrd7627a_add_io_devices+0x100 0xc07cd05c is in qrd7627a_add_io_devices (/home/yejialong/GH700C/kernel…

图像分类_01图像分类简介:挑战+近邻分类器+CIFAR-10数据集概述

2.1.1 图像分类 任务目的&#xff1a;对输入的图像赋予一个标签&#xff0c;这个标签在指定类别集合中。 下面这个例子中&#xff0c;图像分类模型拍摄一张图像并将概率分配给4个标签{cat&#xff0c;dog&#xff0c;hat&#xff0c;mug}。如图所示&#xff0c;请记住&#xf…

数据结构之图:有向图的拓扑排序,Python代码实现——26

有向图的拓扑排序 拓扑排序介绍 什么是拓扑排序&#xff1f; 一个有向图的拓扑排序&#xff08;Topological sort 或 Topological ordering&#xff09;是根据其有向边从顶点U到顶点V对其所有顶点的一个线性排序举个例子&#xff1a;让一个拓扑排序的图中的所有顶点代表某项…

Openstack 一直在调度中解决

查看日志/var/log/nova/nova-scheduler.log,/var/log/nova/nova-compute.log,均无报错 查看/var/log/nova/nova-conductor.log报错为 2017-02-06 09:27:04.976 2206 ERROR oslo_messaging.rpc.server OperationalError: (pymysql.err.OperationalError) (1040, uToo many conne…

图像分类_02神经网络(NN)简介:定义+ 感知机+历史

2.2.1 什么是神经网络 人工神经网络&#xff08; Artificial Neural Network&#xff0c; 简写为ANN&#xff09;也简称为神经网络&#xff08;NN&#xff09;。是一种模仿生物神经网络&#xff08;动物的中枢神经系统&#xff0c;特别是大脑&#xff09;结构和功能的 计算模型…

【Github教程】史上最全github使用方法:github入门到精通

原文 http://www.eoeandroid.com/thread-274556-1-1.html 【初识Github】 首先让我们大家一起喊一句“Hello Github”。YEAH!就是这样。Git是一个分布式的版本控制系统&#xff0c;最初由Linus Torvalds编写&#xff0c;用作Linux内核代码的管理。在推出后&#xff0c;Git在其…

图像分类_03分类器及损失:线性分类+ SVM损失+Softmax 分类+交叉熵损失

2.3.1 线性分类 2.3.1.1 线性分类解释 上图图中的权重计算结果结果并不好&#xff0c;权重会给我们的猫图像分配⼀个⾮常低的猫分数。得出的结果偏向于狗。 如果可视化分类&#xff0c;我们为了⽅便&#xff0c;将⼀个图⽚理解成⼀个⼆维的点&#xff0c;在下⾯坐标中显示如下…

数据结构之图:加权无向图与寻找最小生成树,Python——27

加权无向图与prim算法和Kruskal算法寻找最小生成树 加权无向图的介绍 引入 加权无向图是一种为每条边关联一 个权重值或 是成本的图模型。这种图能够自然地表示许多应用。在一副航空图中,边表示航线,权值则可以表示距离或是费用。在一副电路图中,边表示导线,权值则可能表示导…