-
Python参数列表
2018-12-09 16:48:27Python不定长参数列表 用星号*实现不定长参数列表,单个*表示将参数以tuple的形式传入,两个*表示将参数以dict的形式传入,前者传参不能指定参数,后者传参必须指定参数,且参数会被处理成str类型。 def f(*args, **... -
python 参数类型
2019-05-28 22:20:12文章目录1、简介2、必须...python 常见类型 2、必须参数 也就是我们常见的参数 def fun (name ,age): print(name + " "+ str(age) ) fun ("lum",27) log: lum 27 3、默认值函数 def fun_1(name,country = "CN",s...1、简介
python 常见参数函数类型
2、必须参数
也就是我们常见的参数
def fun (name ,age): print(name + " "+ str(age) ) fun ("lum",27)
log:
lum 273、默认值函数
def fun_1(name,country = "CN",sex = "Man"): print(name +" " + country + " " + sex) fun_1("lum") fun_1("lum","China") fun_1("lum",sex = "Boy")
打印:
lum CN Man
lum China Man
lum CN Boy4、可变参数函数
可以传入任意个参数
def fun_3(*args): print(args) fun_3(1) fun_3("hello",1) fun_3(1,[1,"Hello",False]) fun_3("hello",134,True)
打印:
(1,)
(‘hello’, 1)
(1, [1, ‘Hello’, False])
(‘hello’, 134, True)我们看到 可变参将传进去的参数都放在了元组里,变成了数组对象
def fun_3(*args): print(args) fun_3([1,"Hello"]) fun_3(*[1,"Hello"])
打印:
([1, ‘Hello’],)
(1, ‘Hello’)def fun_3(*args): print(args) fun_3("Hello") fun_3(*"Hello")
打印:
(‘Hello’,)
(‘H’, ‘e’, ‘l’, ‘l’, ‘o’)def fun_3(*args): print(args) fun_3((1,"Hello")) fun_3(*(1,"Hello"))
打印:
((1, ‘Hello’),)
(1, ‘Hello’)我们可以看到,可变参数也可以传递 字符串,列表、元组,但是在传递之前添加一个 * 就出 序列解包,也就是把他们里面的元素拿出来 ,依次传递
示例:def fun3(*args): string = "" for i in args: string += str(i) print(string) fun3(1,"SB",True) fun3(*[1,"SB",True]) fun3([1,"SB",True])
打印:
1SBTrue
1SBTrue
[1, ‘SB’, True]5、可变关键字参数函数
#fun4(1) #fun4(1,2) #fun4({"name:1"}) #fun4(**[[1,"Hello"]]) 以上出错 fun4(name = 1) fun4(name=1,age=2) fun4(**{"sex":3}) #3 可传入字典
打印:
{‘name’: 1}
{‘name’: 1, ‘age’: 2}
{‘sex’: 3}我们看到可变关键字函数,传入之后被封装成了 字典
实例:
def fun4(**args): print(args) for i in args.keys(): print(str(i)) # 将键打印出来 #fun4(1) #fun4(1,2) #fun4({"name:1"}) #fun4(**[[1,"Hello"]]) fun4(name = 1) fun4(name=1,age=2) fun4(**{"sex":3})
打印:
{‘name’: 1}
name
{‘name’: 1, ‘age’: 2}
name
age
{‘sex’: 3}
sex -
python参数传递:对象的引用
2018-06-08 10:04:56python参数传递:对象的引用         大家都知道在python中,一切皆对象,变量也不再具有类型,变量...python参数传递:对象的引用 大家都知道在python中,一切皆对象,变量也不再具有类型,变量仅仅是对象的一个引用,我们通常用变量来测类型,通常测得就是被这个变量引用得对象的类型。
例如:
这里的类型就是123这个对象的类型。变量的作用就相当于c中的指针,指向特定的内存空间,有了这个基础,我们就可以来聊一聊python中的参数传递了。
接触过c或c++的朋友都知道,一般我们常说的传参方式有两种:传引用、传值
但是python和他们都不一样。python采用的是传递对象的引用,为了方便说明,我们来看一个例子:test = [1] def change1(a): a = [2] def change2(a): a.append(3) change1(test) change2(test) print test
我们来看一下最后的输出:
[1,3]
是不是有人误以为是[2,3]?那你可得好好看接下来的内容。
传参传的是对象的引用!!!!!!
所以在change1(a)函数中,我们知道形参a与test引用了同一块内存空间,然后a在函数内部被修改了,它执行了另一块内存空间,也就是存放[2]的地方,但是只是a的指向改变了,test的指向还是存放[1]的内存空间。所以,接下来change2()对这块内存空间上放的值进行了修改,就得到了我们最后看到的结果。
为了加深理解,我觉得有必要再举一个类继承的例子:class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x 输出结果为: 1 1 1 1 2 1 3 2 3
在继承中,所有子类中的x原本都是引用的父类中x对象的存储空间,但是child1中的x单独指向了另一块存储空间。这样以来,的到这个结果也就不意外了
-
python参数问题
2018-12-22 16:59:43定义默认参数要牢记一点:默认参数必须指向不变对象! 否则会掉进坑里面的定义默认参数要牢记一点:默认参数必须指向不变对象! 否则会掉进坑里面的
参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。比如定义一个函数,包含上述若干种参数:
def f1(a, b, c=0, *args, **kw):
print(‘a =’, a, ‘b =’, b, ‘c =’, c, ‘args =’, args, ‘kw =’, kw)def f2(a, b, c=0, *, d, **kw):
print(‘a =’, a, ‘b =’, b, ‘c =’, c, ‘d =’, d, ‘kw =’, kw)
在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。f1(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}f1(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}f1(1, 2, 3, ‘a’, ‘b’)
a = 1 b = 2 c = 3 args = (‘a’, ‘b’) kw = {}f1(1, 2, 3, ‘a’, ‘b’, x=99)
a = 1 b = 2 c = 3 args = (‘a’, ‘b’) kw = {‘x’: 99}f2(1, 2, d=99, ext=None)
a = 1 b = 2 c = 0 d = 99 kw = {‘ext’: None}
最神奇的是通过一个tuple和dict,你也可以调用上述函数:args = (1, 2, 3, 4)
kw = {‘d’: 99, ‘x’: ‘#’}
f1(*args, **kw)
a = 1 b = 2 c = 3 args = (4,) kw = {‘d’: 99, ‘x’: ‘#’}args = (1, 2, 3)
kw = {‘d’: 88, ‘x’: ‘#’}
f2(*args, **kw)
a = 1 b = 2 c = 3 d = 88 kw = {‘x’: ‘#’}
所以,对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。虽然可以组合多达5种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差。
小结
Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!
要注意定义可变参数和关键字参数的语法:
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict。
以及调用函数时如何传入可变参数和关键字参数的语法:
可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过args传入:func((1, 2, 3));
关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过kw传入:func({‘a’: 1, ‘b’: 2})。
使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。
定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。
-
python参数传递
2018-07-12 21:20:54当我们在python中使用等号给数组赋值的时候往往会出现一个问题 a = [1, 2, 3] b = a print("a数组为:",a) # a数组为: [1, 2, 3] print("b数组为:",b) # b数组为: [1, 2, 3... -
Python 参数解析库 docopt 简单使用图文教程。
2017-06-21 11:11:57Python 参数解析库 docopt 简单使用图文教程。 转载文章,便于记录~~ -
python参数传递问题(参数传出)
2017-07-28 21:02:34可更改参数传递变量、对象与类型关系python是动态类型语言,并不需要预先声明变量类型,变量的类型和值在赋值的那一刻完成初始化。进一步说,python中的类型是属于对象的,而不是变量。 例如:a=2 b=[1,2]分别表示... -
python 参数解析器metavar
2019-10-16 15:26:17元变量:它为帮助消息中的可选参数提供了不同的名称。在add_argument()中为metavar关键字参数提供一个值。 例如: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo'... -
Python的argv怎么使用(Python参数、解包和变量)
2019-07-03 22:19:01argv:即所谓的参数变量,这个变量保存着你运行Python脚本时传递给Python脚本的参数。 解包:把argv中的东西取出来,将所有的参数依次赋值给左边的变量。 在argv.py文件中输入以下代码: from sys import argv ... -
python参数化-数组
2017-09-04 20:04:00#coding: utf-8 __author__ = 'KK' from selenium import webdriver ...'''参数化 ''' search_text = ['python','中文','selenium'] for text in search_text: print text driver = webdriver.Ie() driver.get -
python参数传递那些事
2015-11-23 08:52:31在python中,函数参数的定义和传递有以下几种方式: 语法 意义 def func(name) 普通参数,可以根据位置匹配,也可以根据key来匹配 def func(name=value) 默认参数,当参数... -
在PyCharm中设置python参数
2018-08-31 16:26:07最近在学习python,在网上看到一个图片路径可用MD5重命名的实例,链接:...---》这应该是sys.argv[1]造成的,因为没有提供所需参数,现在的问题就是给当前运行程序提供参数 解决方案: 首先找到编辑器导... -
python参数(位置参数,默认参数,*args,**kwargs)
2018-03-07 12:13:29args与位置参数和默认参数混用的情况下 示例一、(三者顺序是:位置参数、默认参数、*args)(注意三者的顺序) *args:(表示参数元组) def foo(x,y=1,*args): pass foo (1,2,3,4,5) // 其中的x为1,y=1的值... -
python参数*params、**params使用
2020-03-05 12:46:55目录 收集其余的位置参数:*params(输出元组) 收集关键字参数:**params(输出字典) 收集其余的位置参数:*params(输出元组) ...def print_params2(x,*params):#位置参数+收集位置参数... -
解释python参数fig.add_subplot(111)
2019-12-16 14:54:04找了好几个文档总结了下括号里的参数代表的含义 (xxx)这里前两个表示几*几的网格,最后一个表示第几子图 可能说的有点绕口,下面上程序作图一看说明就明白 import matplotlib.pyplot as plt fig = plt.figure... -
Python 参数知识(变量前加星号的意义)
2018-01-02 13:22:02对于这些情况,python提供了两种特别的方法来定义函数的参数,允许函数接受过量的参数,不用显式声明参数。这些“额外”的参数下一步再解释。注意args和kwargs只是python的约定。任何函数参数,你可以自己喜欢的方式... -
Python参数传递 - 引用传递&值传递
2016-05-25 09:51:42值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。>>> a1 = 520 >>> a2 = a1 >>> print a1 520 >>> print a2 520 >>> a2 = a1 + 1 >>> print a2 521 >>> ... -
python 参数传递[打包与解包问题]
2016-05-07 20:53:401.传递参数时,可以传递基于参数名的字典f(**param_dict) 也可以传递基于位置的列表f(*param_list)2.获取参数列表对于函数,可以直接在开头param_dict=locals()获取参数字典 对于方法(类、实例),获取的参数列表... -
Python参数类型检查的简单方法
2011-07-18 13:29:50Python是一门弱类型语言,很多从C/C++转过来的朋友起初不是很适应。比如,在声明一个函数时,不能指定参数的类型。用C做类比,那就是所有参数都是void*类型!void类型强制转换在C++中被广泛地认为是个坏习惯,不到... -
Python函数参数总结(位置参数、默认参数、可变参数、关键字参数和命名关键字参数)
2017-12-09 17:25:25Python函数的参数多达5种,不像Java那样参数(必选参数)只有一种,而是像C++那样提供默认参数,除此之外,还提供可变参数、关键字参数、命名关键字参数,这样就...Python参数类型: - 基本参数(就是其他语言所说的参数 -
Python 命令行参数
2016-09-11 22:25:25概述Python 提供了 getopt 模块来获取命令行参数。$ python test.py arg1 arg2 arg3Python 中也可以所用 sys 的 sys.argv 来获取命令行参数: sys.argv 是命令行参数列表。 len(sys.argv) 是命令行参数个数。 注:... -
python 函数多参数
2013-07-21 11:40:38Python参数传递任意参数 如果用过C语言中的printf()函数,那么就会对参数传递个数可变的意义比较了解了。尽管可选参数的机制令函数的参数个数是可变的,但还是有限制的,参数个数有最大的限制,而且还要指明哪些... -
python argv参数
2017-07-29 17:05:39这里,当我们执行python using_sys.py we are arguments的时候,我们使用python命令运行using_sys.py模块,后面跟着的内容被作为参数传递给程序。Python为我们把它存储在sys.argv变量中。记住,脚本的名称总是sys.... -
Python命令行参数
2017-06-04 23:14:14Python的命令行参数,提供了很多有用的功能,可以方便调试和运行,通过man python就能查看,以下是一些常用参数使用实例和场景: 1. -B参数,在import时候,不产生pyc或者pyo文件: 比如有a.py,内容如下:... -
【Python】Python3.7.3 - Python命令行参数详解
2019-03-29 16:57:28文章目录Python命令行参数概览-c cmd参数示例-m mod参数示例file参数示例- 参数示例命令行选项详解-b 选项-B选项-d选项-E选项-h / -? / --help选项-i选项-I选项-O与-OO选项-q选项-s选项-S选项-u选项-v选项-V / --... -
Python传入参数的几种方法
2018-03-20 18:04:13Python传入参数的方法有:位置参数、默认参数、可变参数、关键字参数、和命名关键字参数、以及各种参数调用的组合 写在前面 Python唯一支持的参数传递方式是『共享传参』(call by sharing) 多数面向对象...