Python中的参数
Python中的参数
1. python函数参数有多重形式:
* test(arg1,arg2,`*args`)
* test(arg1,arg2,`*args`,`**kwargs`)
2. 其中比较糊弄人的是:*args和**kwargs
*args 变长的占位参数列表 - <class 'tuple'>
**kwargs 变长的键值对参数列表 - <class 'dict'>
3. 什么是占位参数:
test(arg1,arg2) 参数括弧中列出的标识符就是占位参数
*args变长占位参数是用来发送一个非键值对的可变数量的参数列表给一个函数, 可以遍历得到它
def test_var_args(f_arg, *argv):
print(type(argv))
# <class 'tuple'>
print("first normal arg:", f_arg)
for arg in argv:
print("another arg through *argv:", arg)
test_var_args('yasoob', 'python', 'eggs', 'test')
4. 什么是键值对参数:
**kwargs 允许你将变长度的键值对, 作为参数传递给一个函数, 说白了就是函数的参数是个dict,但是不能直接传个dict给函数,得加上前导**解包
def test_kwarg(**kwargs):
print(type(kwargs))
# <class 'dict'>
for key, value in kwargs.items():
print("{0} == {1}".format(key, value))
test_kwarg(name="foo")
test_kwarg(name="foo", age=26)
test_kwarg(**{'name': "foo", 'age': '26'})
5. 综合看一个更复杂的例子
def test_kwarg(name, age, *args, **kwargs):
print('--------------------------------------')
print('all positional args:')
print('name:{0}'.format(name))
print('age:{0}'.format(age))
print('\n')
print('all optional positional *args:')
for arg in args:
print('args:{0}'.format(arg))
print('\n')
print('all keywords **kwargs:')
for key, value in kwargs.items():
print("{0} == {1}".format(key, value))
# 只有占位参数
test_kwarg("foo", 26)
# 占位参数 + 可选占位参数
test_kwarg("foo", 26, 'opt1')
# 占位参数 + 键值对参数
test_kwarg("foo", 26, kw1=100, kw2=200)
# 占位参数 + 可选占位参数 + 键值对参数
test_kwarg("foo", 26, 'opt1', 'opt2', kw1=100, kw2=200)
# --------------------------------------
# all positional args:
# name:
# foo
# age:
# 26
# all optional positional * args:
# all keywords ** kwargs:
# --------------------------------------
# all positional args:
# name:
# foo
# age:
# 26
# all optional positional * args:
# args:
# opt1
# all keywords ** kwargs:
# --------------------------------------
# all positional args:
# name:
# foo
# age:
# 26
# all optional positional * args:
# all keywords ** kwargs:
# kw1 == 100
# kw2 == 200
# --------------------------------------
# all positional args:
# name:
# foo
# age:
# 26
# all optional positional * args:
# args:
# opt1
# args:
# opt2
# all keywords ** kwargs:
# kw1 == 100
# kw2 == 200
6. Note: 函数调用时,*args, **kwargs是可选的,但是前面的常规参数是必须的
7. over
Python中的参数的更多相关文章
- 从 python 中 axis 参数直觉解释 到 CNN 中 BatchNorm 的工作方式(Keras代码示意)
1. python 中 axis 参数直觉解释 网络上的解释很多,有的还带图带箭头.但在高维下是画不出什么箭头的.这里阐述了 axis 参数最简洁的解释. 假设我们有矩阵a, 它的shape是(4, ...
- (转)python中函数参数中如果带有默认参数list的特殊情况
在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]): for i in range(x): ...
- python中函数参数的引用方式
值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...
- python中的参数问题
python中的有默认参数和可变参数之分 默认参数arg 可变参数args, kargs 默认参数arg就是调用指定参数 可变参数*arg调用时传入的的参数会被python自动包装为列表 可变参数ka ...
- (转)python中的参数:*args和**kwargs
def foo(*args, **kwargs):print 'args = ', argsprint 'kwargs = ', kwargsprint '---------------------- ...
- python中函数参数*args和**kw的区别
1.函数与参数(实参) 在python中创建函数是def,创建函数名是def f(),f函数名字,def f(a,b),这里的a,b是两个参数,函数名是自定义的,参数也是自定义,随意就好.看图如下效果 ...
- Python中函数参数类型和参数绑定
参数类型 Python函数的参数类型一共有五种,分别是: POSITIONAL_OR_KEYWORD(位置参数或关键字参数) VAR_POSITIONAL(可变参数) KEYWORD_ONLY(关键字 ...
- 对Python中函数参数类型及排序问题,三个方面的总结
Python中函数的参数问题有点复杂,主要是因为参数类型问题导致的情况比较多,下面来分析一下. 参数类型:缺省参数,关键字参数,不定长位置参数,不定长关键字参数. 其实总共可以分为 位置参数和关键字参 ...
- python中函数参数
默认参数注意点 优点:灵活,当没有指定与形参对应的实参时就会使用默认参数 缺陷: 例子: >>> def h(m, l=[]): #默认参数时列 ...
随机推荐
- Python生成器的经典程序
import random def get_data(): """返回0到9之间的3个随机数""" return random.sample ...
- mysql存储图片问题
1. 借鉴http://blog.chinaunix.net/uid-7374279-id-4255927.html 字段名为blob,有四种类型 TinyBlob(255B).Blob(65k).M ...
- java内存泄漏
java内存泄漏主要分成两个方面: (1)堆中申请的空间没有被释放 (2)对象已不在被使用,但是仍然存在在内存当中 以下集中情况可能会导致内存泄漏 (1)静态集合的使用hashmap和vector,静 ...
- xshell传输文件到Centos
Reference: [1] http://www.myhack58.com/Article/sort099/sort0102/2015/61154.htm [2] http://www.cnblog ...
- mysql 基本操作语句
mysql 基本操作笔记: 创建表demo:CREATE TABLE `role` ( `role_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMME ...
- PHP 表单验证
1. 验证文本框是否有内容且不能为空 <?php if (! (filter_has_var(INPUT_POST, 'flavor') && (strlen(filter_in ...
- 《Python标准库》 目录
目录 译者序序前言第1章 文本1.1 string—文本常量和模板1.1.1 函数1.1.2 模板1.1.3 高级模板1.2 textwrap—格式化文本段落1.2.1 示例数据1.2.2 填充段落1 ...
- linux-13基础命令之-touch,mkdir
1. touch 命令 用于创建空白文件与修改文件时间,格式:touch[选项][文件]: linux 下文件时间有三种 @1.更改时间(mtime):内容修改时间: @2.更改权限(ctime): ...
- 配置WCF同时支持WSDL和REST,swaggerwcf生成文档
配置WCF同时支持WSDL和REST,SwaggerWCF生成文档 VS创建一个WCF工程,通过NuGet添加SwaggerWcf 创建完成后通过 程序包管理控制台 pm>Install-Pac ...
- 让ZenCoding提升编码速度
日前写了一篇关于VS神级插件Web Essentials的系列博客,其中在HTML&CSS操作技巧一节简单提到了ZenCoding,今天来详细说一下这个东西. 摘要 Zen Coding是一种 ...