python怎样在主函数中将多个python调用自定义模块函数模块的某个参数的值连接起来

python进阶教程之函数参数的多种传递方法
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了python进阶教程之函数参数的多种传递方法,包括关键字传递、默认值传递、包裹位置传递、包裹关键字混合传递等,需要的朋友可以参考下
我们已经接触过函数(function)的参数(arguments)传递。当时我们根据位置,传递对应的参数。我们将接触更多的参数传递方式。
回忆一下位置传递:
def f(a,b,c):
&&& return a+b+c
print(f(1,2,3))
在调用f时,1,2,3根据位置分别传递给了a,b,c。
关键字传递
有些情况下,用位置传递会感觉比较死板。关键字(keyword)传递是根据每个参数的名字传递参数。关键字并不用遵守位置的对应关系。依然沿用上面f的定义,更改调用方式:
print(f(c=3,b=2,a=1))
关键字传递可以和位置传递混用。但位置参数要出现在关键字参数之前:
print(f(1,c=3,b=2))
参数默认值
在定义函数的时候,使用形如a=19的方式,可以给参数赋予默认值(default)。如果该参数最终没有被传递值,将使用该默认值。
def f(a,b,c=10):
&&& return a+b+c
print(f(3,2))
print(f(3,2,1))
在第一次调用函数f时, 我们并没有足够的值,c没有被赋值,c将使用默认值10.
第二次调用函数的时候,c被赋值为1,不再使用默认值。
在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。
下面是包裹位置传递的例子:
def func(*name):
&&& print type(name)
&&& print name
func(1,4,6)
func(5,6,7,1,2,3)
两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple),这就是包裹位置传递。
为了提醒Python参数,name是包裹位置传递所用的元组名,在定义func时,在name前加*号。
下面是包裹关键字传递的例子:
def func(**dict):
&&& print type(dict)
&&& print dict
func(a=1,b=9)
func(m=2,n=1,c=11)
与上面一个例子类似,dict是一个字典,收集所有的关键字,传递给函数func。为了提醒Python,参数dict是包裹关键字传递所用的字典,在dict前加**。
包裹传递的关键在于定义函数时,在相应元组或字典前加*或**。
*和**,也可以在调用的时候使用,即解包裹(unpacking), 下面为例:
def func(a,b,c):
&&& print a,b,c
args = (1,3,4)
func(*args)
在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。(设想一下在调用func时,args前面没有*会是什么后果?)
相应的,也存在对词典的解包裹,使用相同的func定义,然后:
dict = {'a':1,'b':2,'c':3}
func(**dict)
在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。
在定义或者调用参数时,参数的几种传递方式可以混合。但在过程中要小心前后顺序。基本原则是,先位置,再关键字,再包裹位置,再包裹关键字,并且根据上面所说的原理细细分辨。
注意:请注意定义时和调用时的区分。包裹和解包裹并不是相反操作,是两个相对独立的过程。
关键字,默认值,
包裹位置,包裹关键字
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Python自定义函数的创建、调用和函数的参数详解_python
作者:用户
本文讲的是Python自定义函数的创建、调用和函数的参数详解_python,
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创见函数,这被叫做用户自定义函数。一、定义一个函数你
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创见函数,这被叫做用户自定义函数。一、定义一个函数你可以定义一个由自己想要功能的函数,以下是简单的规则:
1.函数代码块以def关键词开头,后接函数标识符名称和圆括号()。2.任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。3.函数的第一行语句可以选择性地使用字符串—用于存放函数说明。4.函数内容以冒号起始,并且缩进。5.Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
复制代码 代码如下:
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。
以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。
复制代码 代码如下:
def printme( str ):
"打印传入的字符串到标准显示设备上"
二、函数调用定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了printme()函数:
复制代码 代码如下:
#!/usr/bin/python# Function definition is heredef printme( str ):
"打印任何传入的字符串"# Now you can call printme functionprintme("我要调用用户自定义函数!");printme("再次调用同一函数");#以上实例输出结果:
#我要调用用户自定义函数!#再次调用同一函数
三、按值传递参数和按引用传递参数所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:
复制代码 代码如下:
#!/usr/bin/python# 可写函数说明def changeme( mylist ):
"修改传入的"
mylist.append([1,2,3,4]);
print "函数内取值: ", mylist
return# 调用changeme函数mylist = [10,20,30];changeme( mylist );print "函数外取值: ", mylist#传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:
#函数内取值:
[10, 20, 30, [1, 2, 3, 4]]#函数外取值:
[10, 20, 30, [1, 2, 3, 4]]
四、函数的参数Python函数可以使用的参数类型:
1.必备参数2.命名参数3.缺省参数4.不定长参数
1、必备参数
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用printme()函数,你必须传入一个参数,不然会出现语法错误:
复制代码 代码如下:
#!/usr/bin/python#可写函数说明def printme( str ):
"打印任何传入的字符串"#调用printme函数printme();#以上实例输出结果:
#Traceback (most recent call last):#
File "test.py", line 11, in &module&#
printme();#TypeError: printme() takes exactly 1 argument (0 given)
2、命名参数
命名参数和函数调用关系紧密,调用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为Python解释器能够用参数名匹配参数值。用命名参数调用printme()函数:
复制代码 代码如下:
#!/usr/bin/python#可写函数说明def printme( str ):
"打印任何传入的字符串"#调用printme函数printme( str = "My string");#以上实例输出结果:
#My string
下例能将命名参数顺序不重要展示得更清楚:
复制代码 代码如下:
#!/usr/bin/python#可写函数说明def printinfo( name, age ):
"打印任何传入的字符串"
print "Name: ",
print "Age ",#调用printinfo函数printinfo( age=50, name="miki" );#以上实例输出结果:
3、缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:
复制代码 代码如下:
#!/usr/bin/python#可写函数说明def printinfo( name, age = 35 ):
"打印任何传入的字符串"
print "Name: ",
print "Age ",#调用printinfo函数printinfo( age=50, name="miki" );printinfo( name="miki" );#以上实例输出结果:
4、不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:
复制代码 代码如下:
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例:
复制代码 代码如下:
#!/usr/bin/python# 可写函数说明def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print "输出: "
print arg1
for var in vartuple:
print var# 调用printinfo 函数printinfo( 10 );printinfo( 70, 60, 50 );#以上实例输出结果:
#输出:#10#输出:#70#60#50
五、匿名函数用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
Lambda函数能接收任何数量的参数但只能返回一个表达式的值,同时只能不能包含命令或多个表达式。匿名函数不能直接调用print,因为lambda需要一个表达式。lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。语法
lambda函数的语法只包含一个语句,如下:
复制代码 代码如下:
lambda [arg1 [,arg2,.....argn]]:expression
如下实例:
复制代码 代码如下:
#!/usr/bin/python#可写函数说明sum = lambda arg1, arg2: arg1 + arg2;#调用sum函数print "Value of total : ", sum( 10, 20 )print "Value of total : ", sum( 20, 20 )#以上实例输出结果:
#Value of total :
30#Value of total :
六、关于return语句return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:
复制代码 代码如下:
#!/usr/bin/python# 可写函数说明def sum( arg1, arg2 ):
# 返回2个参数的和."
total = arg1 + arg2
print "Inside the function : ", total# 调用sum函数total = sum( 10, 20 );print "Outside the function : ", total #以上实例输出结果:
#Inside the function :
30#Outside the function :
七、变量作用域一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:1.全局变量2.局部变量
八、变量和局部变量定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:
复制代码 代码如下:
#!/usr/bin/pythontotal = 0; # This is global variable.# 可写函数说明def sum( arg1, arg2 ):
#返回2个参数的和."
total = arg1 + arg2; # total在这里是局部变量.
print "Inside the function local total : ", total#调用sum函数sum( 10, 20 );print "Outside the function global total : ", total #以上实例输出结果:
#Inside the function local total :
30#Outside the function global total :
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索python
python函数调用
python自定义函数
python调用自定义函数、python调用自定义模块、python 调用自定义类、python 调用自定义包、python装饰器详解,以便于您获取更多的相关知识。
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供
云栖社区()为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!python怎么知道函数参数类型?_python吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:154,556贴子:
python怎么知道函数参数类型?收藏
写C的都知道,C语言有头文件或者声明,需要一个外部库函数时候,很容易就知道函数的原型,各个参数的类型,是输入参数还是输出参数,返回值是什么类型。但是...python的原型只有光秃秃的几个参数在那里,连说明文档里面也是这样的,如果我要调用一个第三方模块的方法,怎么才能知道需要传递的参数是什么类型?看源码除外,望各位不吝赐教。
阿里云云市场镜像可以一键部署云服务器所需要的运行环境和个性化的软件应用,满足建站,应用开发,可视化管理等个性化需求,python镜像让云服务器&即开即用&.
快试试吧,可以对自己使用挽尊卡咯~◆◆
一般只能看它的介绍说明……
如果那个参数必须是某个class的实例,我随便传个int过去可以吗?各位有经验的刚开始是怎么克服这个问题的呢?
快试试吧,可以对自己使用挽尊卡咯~◆◆
可以吖!你要传什么都可以,解释器不会对参数类型进行判断的,所以在定义函数的时候要去判断参数的类型!
这个就是动态语言和静态语言。。。只要调的时候支持某方法就好。看文档就可以
isinstance(object, class)函数,检查某个对象是不是某个类里的例如:&&&isinstance(1,int)True但是这个能不用就不用,毕竟你只要某个对象有某个方法就好,这样破坏的对象“多态”的特征。
两个%%表示%
登录百度帐号推荐应用

我要回帖

更多关于 python编写自定义模块 的文章

 

随机推荐