函数的参数类型有很多,比如说:位置参数、默认值参数、关键参数、命名关键参数、可变长度参数

(1)>>> 函数名              查看函数的内存地址

(2)>>>dir(函数名)         查看函数的属性

一、位置参数(positional arguments),调用时实参和形参的顺序必须严格一致,并且实参和形参的数量必须相同。

#定义
def power(x,n):s = 1while n > 0:n -= 1s *= xreturn s
#调用
power(5)#错误
power(4,5)#正确

二、默认值参数

#在上面的代码中,我们计算的是x的n次方,如果我们经常计算x的平方,我们可以用默认值参数,注意默认值参数只能出现在函数参数的最后
def power(n=2,x):#错误的passdef power(x,n=2):#正确的s = 1while n > 0:n -= 1s *= xreturn s#调用
power(5)#正确,计算5的平方
power(5,3)#这也是正确的,计算的是n>2的情况#注意,如果默认值参数使用不当会导致很难发现的逻辑错误
#例如
def demo(newlist,old_list=[]):old_list.appen(newlist)return old_list
print(demo('5',[1,2,3,4]))#[1,2,3,4,5]
print(demo('aaa',['a','b']))#['a','b','aaa']
print(demo('a'))#['a']
print(demo('b'))#['a','b'],这是因为上一个语句中只传入了一个参数即newlist,所以返回的old_list = ['a'],当再次调用时,虽然只传入了一个参数,但是此时old_list已经被定义了#要解决这个问题,谨记:默认参数必须指向不变的变量
def demo(newlist,old_list=None):#None不变对象作为默认参数pass#注意
#(1)默认值参数只在函数定义时被解释一次
#(2)可以使用“函数名.__defaults__”查看所有默认参数的当前值
#例如
demo.__defaults__#首先有个学生注册的函数,需要传入name和gender两个参数
def enroll(name,gender):print('name:',name)print('gender:',gender)#那如果我还想传入年龄、城市等信息怎么办呢?可以把年龄设置为默认参数
def enroll(name,gender,age=16,city='BeiJing'):print('name:',name)print('gender:',gender)print('age:',age)print('city:',city)
#调用
enroll('Lucy','M')#那么如果我调用的顺序不一致呢?

三、关键参数

#关键参数主要指实参,即调用函数时的参数传递方式,通过关键参数,实参顺序和形参顺序可以不一致
def demo(a,b,c=5):print(a,b,c)
#调用
demo(3,7)#3 7 5
demo(a=7,b=3,c=6)#7 3 6
demo(c=8,a=9,b=0)#9 0 8

四、可变长度参数

#可变长度参数主要有2种方式
#(1)*parameter用来接收多个实参并将其放在一个元组中
#(2)**parameter接收关键参数并存放到字典中,这里的关键参数必须要有键值对#*parameter的用法
def demo(*parameter):print(parameter)
#调用
demo(1,2,3)#**parameter的用法
def demo(**parameter):for item in p.items():print(item)
#调用
demo(x=1,y=2,z=3)
#输出
('x',1)
('y',2)
('z',3)#假如你在开发一个用户注册功能,除了用户名和年龄是必填项,其他是可选项,例如有的用户想要输出城市,另外一个用户想输出职业等等,如何设计注册功能函数?

五、注册问题深入探究

def person(name,age,**kw):print('name:',name,'age:',age,'other:',kw)#只传入必选参数
person('Marry',30)#name:Marry age:30 other:{}#传入任意其他参数,满足注册的需求
person('Bob',39,city='BeiJing')#name:Bob age 39 other:{'city':BeiJing},在这里kw是一个字典
person('Peter',40,gender='M',job='Engineer')#name:Peter age=40 other:{'gender':M,'job':'Engineer'}#封装为字典,再传入参数
extra = {'city':'BeiJing','job':'Engineer'}
person('Jack',25,**extra)#那么如果我想确定可选参数的名字怎么办呢?需要命名关键字参数
#用特殊符号*分隔,*后面的视为命名关键字参数
def person(name,age,*,city,job):print('name:',name,'age:',age,'city:',city,'job:'job)#调用
person('Jack',40,city='BeiJing',job='Engineer')#name:Jack age:40 city:BeiJing job:Engineer#那么如果我输入的关键字参数既有大写又有小写,按照上面的方法出错了怎么办呢?
#考虑如果没有*是什么参数,yes,是位置参数
#这样就强制要求输入小写
def person(name,age,city,job):pass

六、可变长度参数

#几种不同类型的参数可以混合使用,但是不建议这样做def func_4(a,b,c=4,*aa,**bb):print(a,b,c)print(aa)print(bb)#调用
func_4(1,2,3,4,5,6,7,8,9,xx='1',yy='2','zz'='3')
#输出
(1,2,3)
(4,5,6,7,8,9)
{'xx':'1','yy':'2','zz':'3'}

转载于:https://www.cnblogs.com/BASE64/p/10961268.html

python学习之函数的参数类型相关推荐

  1. python学习:函数传参数

    #!/usr/bin/python import sys   def isNum(s):     for i in s:         if i in '0123456789':           ...

  2. python函数定义参数类型和返回值类型

    python中我们也可以定义函数的参数类型和返回值类型,如下代码 #函数参数和返回值的类型声明,python函数类型的声明,更加有意义,更加实用一些 def add(a,b):''':param a: ...

  3. Python学习之函数返回多个值

    Python学习之函数返回多个值 问题的引出 Python中,一个函数能不能一次返回多个值? 在C语言中,函数最多返回一个值,如果要返回多个值,可以把这些值封装在一个结构体中.注意,C语言不允许函数返 ...

  4. 【Python学习】函数

    函数无疑是程序设计中极其重要的一部分,它第一次提出了封装的概念,将一定的功能进行封装以便于使用,这无疑是需要让人非常理解的部分.虽然Python不像C++与Java一样以构造函数为主体的方式进行程序编 ...

  5. python学习 字符串函数

    python学习 字符串函数 字符串不能被改变,以下和函数,只是 原字符串初始化后不能改变,函数只是将改变后的值返回赋给新的变量(当然可以赋给原来的变量) 大小写函数 capitalize()函数 大 ...

  6. python判断特殊字符的函数,python学习--quote()函数,,屏蔽特殊的字符、比如

    python学习--quote()函数,,屏蔽特殊的字符.比如 屏蔽特殊的字符.比如如果url里面的空格!url里面是不允许出现空格的. 在 Python2.x 中的用法是: urllib.quote ...

  7. Java学习第十二天----方法参数类型以及返回值类型问题、链式编程、package包、权限修饰符、内部类、成员内部类

    Java学习第十二天----方法参数类型以及返回值类型问题.链式编程.package包.权限修饰符.内部类.成员内部类 1.方法参数类型: (1)类名作为形式参数: public class MyTe ...

  8. python如何查看函数的参数_python 如何查看自带函数的默认参数?

    python 为什么默认参数不能放在必选参数前面 关于python带默认值的参数只能放在后面的问题曾经不信一见钟情,遇见了你遗失了心:曾经不信爱有多真,遇见了你迷失自己. Python函数里的默认参数 ...

  9. Python基本语法_函数属性 参数类型 偏函数的应用

    目录 目录 前言 软件环境 Python Module的程序入口 函数的属性 Python函数的创建 函数的参数 必备参数 缺省参数 命名参数 不定长参数 匿名参数 偏函数的应用 前言 Python除 ...

最新文章

  1. IDEA tomcat 配置虚拟目录怎么
  2. docker-engine安装好了,下一步该做什么?
  3. Java并发源码之ReentrantLock
  4. 离散型随机变量及其分布列习题
  5. 怎么删除python工程_python根据字典的键来删除元素的方法
  6. #ifdef __cplusplus是什么意思
  7. java 弹性碰撞_球体弹性碰撞位置和速度计算算法
  8. 1405.最长快乐字符串
  9. FISCO BCOS同步模块的优化策略
  10. 思维导图不会画,没关系,实用思维导图模板分享
  11. cnc计算机控制,CNC控制器
  12. telink ble mesh 介绍
  13. 9011,9012,9013,9014,8050,8550 三极管的区别
  14. python新手入门——————字符串函数(2)
  15. 云​大数据和计算技术周报(第43期)
  16. 论邮政有多硬核!邮车意外滑落悬崖,快递员的行为让人动容!
  17. Android的WebView如何播放视频和全屏视频(腾讯X5内核)
  18. 根据教程编写及完成图书管理系统项目分享
  19. 将无风险资产与两种风险资产进行组合
  20. java学习day38(Linux)Linux、命令

热门文章

  1. 如何成为云原生时代的卓越架构师?
  2. 定位Flutter内存问题很难么?
  3. 如何基于Weex实现创新交互体验?手淘开源技术BindingX案例解析
  4. android魅族进度条,魅族基于安卓 10 的首个 Flyme 内测版已推送:16s Pro/16s 尝鲜,可强制开启 90Hz 刷新率...
  5. 朱峰谈概念设计(六):美术部门
  6. 游戏光线追踪往事:十年技术轮回
  7. vscode+XDebug调试远程环境(虚拟机)上的PHP代码
  8. RobHess的SIFT代码解析之RANSAC
  9. scip 练习2.18
  10. [网络流24题]太空飞行计划