Python函数的参数类型Python函数的参数类型主要包括必选参数、可选参数、可变参数、位置参数和关键字参数,本文介绍一下他们的定义以及可变数据类型参数传递需要注意的地方 。
必选参数(Required arguments)是必须输入的参数,比如下面的代码,必须输入2个参数 , 否则就会报错:
其实上面例子中的参数 num1和num2也属于关键字参数,比如可以通过如下方式调用:
执行结果:
可选参数(Optional arguments)可以不用传入函数,有一个默认值 , 如果没有传入会使用默认值 , 不会报错 。
位置参数(positional arguments)根据其在函数定义中的位置调用,下面是pow()函数的帮助信息:
x,y,z三个参数的的顺序是固定的,并且不能使用关键字:
输出:
在上面的pow()函数帮助信息中可以看到位置参数后面加了一个反斜杠/,这是python内置函数的语法定义,Python开发人员不能在python3.8版本之前的代码中使用此语法 。但python3.0到3.7版本可以使用如下方式定义位置参数:
星号前面的参数为位置参数或者关键字参数,星号后面是强制关键字参数,具体介绍见强制关键字参数 。
python3.8版本引入了强制位置参数(Positional-Only Parameters),也就是我们可以使用反斜杠/语法来定义位置参数了,可以写成如下形式:
来看下面的例子:
python3.8运行:
不能使用关键字参数形式赋值了 。
可变参数 (varargs argument) 就是传入的参数个数是可变的,可以是0-n个,使用星号(*)将输入参数自动组装为一个元组(tuple):
执行结果:
关键字参数(keyword argument)允许将任意个含参数名的参数导入到python函数中,使用双星号(**) , 在函数内部自动组装为一个字典 。
执行结果:
上面介绍的参数可以混合使用:
结果:
注意:由于传入的参数个数不定,所以当与普通参数一同使用时,必须把带星号的参数放在最后 。
强制关键字参数(Keyword-Only Arguments)是python3引入的特性,可参考: 。使用一个星号隔开:
在位置参数一节介绍过星号前面的参数可以是位置参数和关键字参数 。星号后面的参数都是强制关键字参数,必须以指定参数名的方式传参,如果强制关键字参数没有设置默认参数,调用函数时必须传参 。
执行结果:
也可以在可变参数后面命名关键字参数,这样就不需要星号分隔符了:
执行结果:
在Python对象及内存管理机制中介绍了python中的参数传递属于对象的引用传递(pass by object reference),在编写函数的时候需要特别注意 。
先来看个例子:
执行结果:
l1 和 l2指向相同的地址,由于列表可变 , l1改变时,l2也跟着变了 。
接着看下面的例子:
结果:
l1没有变化!为什么不是[1, 2, 3, 4]呢?
l = l[4]表示创建一个“末尾加入元素 4“的新列表,并让 l 指向这个新的对象 , l1没有进行任何操作,因此 l1 的值不变 。如果要改变l1的值,需要加一个返回值:
结果:
下面的代码执行结果又是什么呢?
执行结果:
和第一个例子一样,l1 和 l2指向相同的地址,所以会一起改变 。这个问题怎么解决呢?
可以使用下面的方式:
也可以使用浅拷贝或者深度拷贝,具体使用方法可参考Python对象及内存管理机制 。这个问题在Python编程时需要特别注意 。
本文主要介绍了python函数的几种参数类型:必选参数、可选参数、可变参数、位置参数、强制位置参数、关键字参数、强制关键字参数 , 注意他们不是完全独立的,比如必选参数、可选参数也可以是关键字参数,位置参数可以是必选参数或者可选参数 。
另外,python中的参数传递属于对象的引用传递,在对可变数据类型进行参数传递时需要特别注意,如有必要,使用python的拷贝方法 。
参考文档:
--THE END--
python 函数参数类型 python 的函数参数类型分为4种函数的类型python:
1.位置参数:调用函数时根据函数定义的参数位置来传递参数,位置参数也可以叫做必要参数,函数调用时必须要传的参数 。
当参数满足函数必要参数传参的条件,函数能够正常执行:
add(1,2)#两个参数的顺序必须一一对应 , 且少一个参数都不可以
当函数的类型python我们运行上面的程序,输出:
当函数需要两个必要参数,但是调用函数只给了一个参数时 , 程序会抛出异常
add(1)
当我们运行上面的程序,输出:
当函数需要两个必要参数,但是调用函数只给了三个参数时,程序会抛出异常
add(1,2,3)
当我们运行上面的程序,输出
2.关键字参数:用于函数调用,通过“键-值”形式加以指定 。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求 。
add(1,2) # 这种方式传参 , 必须按顺序传参:x对应1,y对应:2
add(y=2,x=1) #以关健字方式传入参数(可以不按顺序)
正确的调用方式
add(x=1, y=2)
add(y=2, x=1)
add(1, y=2)
以上调用方式都是允许的,能够正常执行
错误的调用方式
add(x=1, 2)
add(y=2, 1)
以上调用都会抛出SyntaxError 异常
上面例子可以看出:有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的
3.默认参数:用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值,所有位置参数必须出现在默认参数前,包括函数定义和调用,有多个默认参数时 , 调用的时候,既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数 。当不按顺序提供部分默认参数时,需要把参数名写上
默认参数的函数定义
上面示例第一个是正确的定义位置参数的方式,第二个是错误的,因为位置参数在前,默认参数在后
def add1(x=1,y) 的定义会抛出如下异常
默认参数的函数调用
注意:定义默认参数默认参数最好不要定义为可变对象,容易掉坑
不可变对象:该对象所指向的内存中的值不能被改变,int,string,float,tuple
可变对象,该对象所指向的内存中的值可以被改变,dict,list
这里只要理解一下这个概念就行或者自行百度 , 后续会写相关的专题文章讲解
举一个简单示例
4.可变参数区别:定义函数时,有时候我们不确定调用的时候会多少个参数,j就可以使用可变参数
可变参数主要有两类:
*args: (positional argument) 允许任意数量的可选位置参数(参数),将被分配给一个元组, 参数名前带*,args只是约定俗成的变量名 , 可以替换其函数的类型python他名称
**kwargs:(keyword argument) 允许任意数量的可选关键字参数,,将被分配给一个字典,参数名前带**,kwargs只是约定俗成的变量名,可以替换其他名称
*args 的用法
args 是用来传递一个非键值对的可变数量的参数列表给函数
语法是使用 符号的数量可变的参数; 按照惯例,通常是使用arg这个单词 , args相当于一个变量名,可以自己定义的
在上面的程序中,我们使用* args作为一个可变长度参数列表传递给add()函数 。在函数中,我们有一个循环实现传递的参数计算和输出结果 。
还可以直接传递列表或者数组的方式传递参数,以数组或者列表方式传递参数名前面加(*) 号
理解* * kwargs
**kwargs 允许你将不定长度的键值对, 作为参数传递给函数,这些关键字参数在函数内部自动组装为一个dict
下篇详细讲解 *args, **kwargs 的参数传递和使用敬请关注
Python中的常用内置函数有哪些呢?(1)Lambda函数
用于创建匿名函数,即没有名称函数的类型python的函数 。它只是一个表达式,函数体比def简单很多 。当我们需要创建一个函数来执行单个操作并且可以在一行中编写时,就可以用到匿名函数了 。
Lamdba的主体是一个表达式,而不是一个代码块 。仅仅能在lambda表达式中封装有限的逻辑进去 。
利用Lamdba函数 , 往往可以将代码简化许多 。
(2)Map函数
会将一个函数映射到一个输入列表的所有元素上,比如我们先创建了一个函数来返回一个大写的输入单词 , 然后将此函数应有到列表colors中的所有元素 。
我们还可以使用匿名函数lamdba来配合map函数 , 这样可以更加精简 。
(3)Reduce函数
当需要对一个列表进行一些计算并返回结果时,reduce()是个非常有用的函数 。举个例子,当需要计算一个整数列表所有元素的乘积时,即可使用reduce函数实现 。
它与函数的最大的区别就是,reduce()里的映射函数(function)接收两个参数,而map接收一个参数 。
(4)enumerate函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中 。
它的两个参数,一个是序列、迭代器或其函数的类型python他支持迭代对象;另一个是下标起始位置,默认情况从0开始,也可以自定义计数器的起始编号 。
(5)Zip函数
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
当我们使用zip()函数时,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同 。
python内置函数有哪些python常见的内置函数有函数的类型python:
1. abs()函数返回数字的绝对值 。
2. all() 函数用于判断给定的参数中的所有元素是否都为 TRUE函数的类型python,如果是返回 True , 否则返回 False 。元素除了是 0、空、None、False 外都算 True;空元组、空列表返回值为True 。
3.any() 函数用于判断给定的参数是否全部为False , 是则返回False,如果有一个为True,则返回True 。元素除了是 0、空、False外都算 TRUE 。
4. bin()函数返回一个整数int或者长整数long int的二进制表示 。
5. bool() 函数用于将给定参数转换为布尔类型,如果参数不为空或不为0,返回True;参数为0或没有参数,返回False 。
6. bytearray()方法返回一个新字节数组 。这个数组里的元素是可变的 , 并且每个元素的值范围: 0 = x256(即0-255) 。即bytearray()是可修改的二进制字节格式 。
7. callable()函数用于检查一个对象是否可调用的 。对于函数、方法、lambda函式、类以及实现了 __call__ 方法的类实例, 它都返回 True 。(可以加括号的都可以调用)
8. chr()函数用一个范围在range(256)内(即0~255)的整数作参数,返回一个对应的ASCII数值 。
9. dict()函数用来将元组/列表转换为字典格式 。
10. dir()函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表 。
扩展资料:
如何查看python3.6的内置函数?
1、首先先打开python自带的集成开发环境IDLE;
2、然后我们直接输入"dir(__builtins__)",需要注意的是builtins左右的下划线都是两个;
3、回车之后我们就可以看到python所有的内置函数;
4、接下来我们学习第二种查看python内置函数的方法,我们直接在IDLE中输入"import builtins",然后输入"dir(builtins)";
5、然后回车,同样的这个方法也可以得到所有的python内置的函数;
6、这里我们可以使用python内置函数len()来查看python内置函数的个数,这里我们直接输入"len(dir(builtins))";
7、回车之后我们可以看到系统返回值153,说明我们现在这个版本中有153个内置函数;
8、最后我们介绍一个比较有用的内置函数"help",python内置函数有一百多个,我们当然不能记住所有的函数,这里python提供了一个"help"函数,我们来看一个例子一起来体会一下help函数的用法,这里我们直接输入"help(len)",然后回车,会看到系统给我们对于内置函数"len"的解释,当然对于其他函数可能会有更加详细的解释以及用法提示 。
python中函数包括1. print()函数:打印字符串
2. raw_input()函数:从用户键盘捕获字符
3. len()函数:计算字符长度
4. format(12.3654,'6.2f'/'0.3%')函数:实现格式化输出
5. type()函数:查询对象的类型
6. int()函数、float()函数、str()函数等:类型的转化函数
7. id()函数:获取对象的内存地址
8. help()函数:Python的帮助函数
9. s.islower()函数:判断字符小写
10. s.sppace()函数:判断是否为空格
11. str.replace()函数:替换字符
12. import()函数:引进库
13. math.sin()函数:sin()函数
14. math.pow()函数:计算次方函数
15. 3**4: 3的4次方
16. pow(3,4)函数:3的4次方
17. os.getcwd()函数:获取当前工作目录
18. listdir()函数:显示当前目录下的文件
19. socket.gethostbyname()函数:获得某主机的IP地址
20. urllib.urlopen(url).read():打开网络内容并存储
21. open().write()函数:写入文件
22. webbrowser.open_new_tab()函数:新建标签并使用浏览器打开指定的网页
23. def function_name(parameters):自定义函数
24. time.sleep()函数:停止一段时间
25. random.randint()函数:产生随机数
Python的函数都有哪些?Python 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段 。
函数能提高应用的模块性,和代码的重复利用率 。函数的类型python你已经知道Python提供了许多内建函数,比如print() 。但你也可以自己创建函数 , 这被叫做用户自定义函数 。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则函数的类型python:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号() 。
任何传入参数和自变量必须放在圆括号中间 。圆括号之间可以用于定义参数 。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明 。
函数内容以冒号起始,并且缩进 。
return [表达式] 结束函数,选择性地返回一个值给调用方 。不带表达式的return相当于返回 None 。
语法
def functionname( parameters ):"函数_文档字符串"
function_suite
return [expression]
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的 。
实例
以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上 。
实例(Python 2.0 )
def printme( str ):"打印传入的字符串到标准显示设备上"
print str
return
函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构 。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行 。
如下实例调用了printme()函数:
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 定义函数def printme( str ):"打印任何传入的字符串"
print str
return
# 调用函数printme("我要调用用户自定义函数!")printme("再次调用同一函数")
以上实例输出结果:
我要调用用户自定义函数!再次调用同一函数
参数传递
在 python 中,类型属于对象,变量是没有类型的:
a=[1,2,3]
a="Runoob"
以上代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象 。
可更改(mutable)与不可更改(immutable)对象
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象 。
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a 。
可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改 , 本身la没有动,只是其内部的一部分值被修改了 。
python 函数的参数传递:
不可变类型:类似 c的值传递,如 整数、字符串、元组 。如fun(a),传递的只是a的值,没有影响a对象本身 。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身 。
可变类型:类似 c的引用传递,如 列表,字典 。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
python 中一切都是对象 , 严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象 。
python 传不可变对象实例
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
def ChangeInt( a ):a = 10
b = 2ChangeInt(b)print b # 结果是 2
实例中有 int 对象 2,指向它的变量是 b , 在传递给 ChangeInt 函数时,按传值的方式复制了变量 b,a 和 b 都指向了同一个 Int 对象,在 a=10 时,则新生成一个 int 值对象 10,并让 a 指向它 。
传可变对象实例
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可写函数说明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 函数的类型决定返回值的类型】调用printme()函数,你必须传入一个参数,不然会出现语法错误:
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可写函数说明def printme( str ):"打印任何传入的字符串"
print str
return
#调用printme函数printme()
以上实例输出结果:
Traceback (most recent call last):
File "test.py", line 11, in module
printme()TypeError: printme() takes exactly 1 argument (0 given)
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值 。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值 。
以下实例在函数 printme() 调用时使用参数名:
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可写函数说明def printme( str ):"打印任何传入的字符串"
print str
return
#调用printme函数printme( str = "My string")
以上实例输出结果:
My string
下例能将关键字参数顺序不重要展示得更清楚:
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可写函数说明def printinfo( name, age ):"打印任何传入的字符串"
print "Name: ", name
print "Age ", age
return
#调用printinfo函数printinfo( age=50, name="miki" )
以上实例输出结果:
Name:mikiAge50
默认参数
调用函数时,默认参数的值如果没有传入,则被认为是默认值 。下例会打印默认的age,如果age没有被传入:
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可写函数说明def printinfo( name, age = 35 ):"打印任何传入的字符串"
print "Name: ", name
print "Age ", age
return
#调用printinfo函数printinfo( age=50, name="miki" )printinfo( name="miki" )
以上实例输出结果:
Name:mikiAge50Name:mikiAge35
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数 。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名 。基本语法如下:
def functionname([formal_args,] *var_args_tuple ):"函数_文档字符串"
function_suite
return [expression]
加了星号(*)的变量名会存放所有未命名的变量参数 。不定长参数实例如下:
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可写函数说明def printinfo( arg1, *vartuple ):"打印任何传入的参数"
print "输出: "
print arg1
for var in vartuple:print var
return
# 调用printinfo 函数printinfo( 10 )printinfo( 70, 60, 50 )
以上实例输出结果:
输出:10输出:706050
匿名函数
python 使用 lambda 来创建匿名函数 。
lambda只是一个表达式,函数体比def简单很多 。
lambda的主体是一个表达式,而不是一个代码块 。仅仅能在lambda表达式中封装有限的逻辑进去 。
lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数 。
虽然lambda函数看起来只能写一行,却不等同于C或C的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率 。
语法
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
如下实例:
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可写函数说明sum = lambda arg1, arg2: arg1arg2
# 调用sum函数print "相加后的值为 : ", sum( 10, 20 )print "相加后的值为 : ", sum( 20, 20 )
以上实例输出结果:
相加后的值为 :30相加后的值为 :40
return 语句
return语句[表达式]退出函数,选择性地向调用方返回一个表达式 。不带参数值的return语句返回None 。之前的例子都没有示范如何返回数值 , 下例便告诉你怎么做:
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可写函数说明def sum( arg1, arg2 ):# 返回2个参数的和."
total = arg1arg2
print "函数内 : ", total
return total
# 调用sum函数total = sum( 10, 20 )
以上实例输出结果:
函数内 :30
变量作用域
一个程序的所有的变量并不是在哪个位置都可以访问的 。访问权限决定于这个变量是在哪里赋值的 。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称 。两种最基本的变量作用域如下:
全局变量
局部变量
全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域 。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问 。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中 。如下实例:
实例(Python 2.0 )
#!/usr/bin/python# -*- coding: UTF-8 -*-
total = 0 # 这是一个全局变量# 可写函数说明def sum( arg1, arg2 ):#返回2个参数的和."
total = arg1arg2 # total在这里是局部变量.
print "函数内是局部变量 : ", total
return total
#调用sum函数sum( 10, 20 )print "函数外是全局变量 : ", total
以上实例输出结果:
函数内是局部变量 :30函数外是全局变量 :0
函数的类型python的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于函数的类型决定返回值的类型、函数的类型python的信息别忘了在本站进行查找喔 。
推荐阅读
- 手机怎么弄电子版表格打印,手机上电子表格怎么打印
- ufa格斗游戏,uwf格斗
- 输入爱心形状代码Java 用java编个爱心图案
- 老板如何做电商,如何成为电商老板
- tp5中html标签,html type标签
- go语言多个方法打包一起 go语言多个方法打包一起运行
- 投屏要怎么安装电视,电视机安装投屏
- 一站多服务器,一台服务器如何搭建多个网站
- 巴士单机游戏女生,巴士游戏大全手机版