5步教你搞清函数参数传递,就这么简单

阅读本文大概需要5分钟

前面讲了函数里面的作用域,今天我们来讲python函数的参数传递,参数传递用法非常灵活_(同时也混淆弄错)_,我们来剖析一下Python里面的参数传递长什么样子,以及为啥长成这个样子,到底有什么奥妙在里面

语言是相同的,相信有其他编程语言功力的同学比如java,c++,perl这些函数里面也有类似的设计.Python里面对函数参数传递分以下几种:

  • 位置参数

  • 默认参数 #在函数运行前参数就被赋了值

  • 关键字参数 #通过变量名字进行匹配,而不是通过位置

  • 可变长度参数

1)任意多个非关键字可变长参数(元组)

2)任意多个关键字变量参数(字典)

有同学说怎么这么麻烦啊,这跟我们生活中的很多产品类似,比如相机的傻瓜模式和专家模式,汽车里面的自动档和手动挡,大同小异python有这么多参数的传递方式,其实主要了为了软件设计的灵活和功能的扩展.

我先从最简单的开始****介绍:

1.位置参数

python中最普通的函数使用是这种带位置参数的函数,这跟我们其他语言的普通的函数是一样的,所有参数在传递的时候按照位置来传递,列如:

把’Hi Python’赋给message,2赋给times

2.默认参数

一般我们调用函数的时候都会传入值,但是懒人有的时候,希望我输入了值就用我的,我懒的时候不输入了python也能给我一个默认值,这就用到了默认参数的特性,看个例子吧:

def printMessage(message,times=2):

print (message*times)

printMessage(‘Hi Python:’)#没有输入times的值

>>Hi Python:Hi Python:

看我们很懒,没有输入times的值,python就会自动用times的默认值2,是不是很爽

  • 其实这个特性对我们开发产品的时候非常有帮助,有的时候一个函数有很多参数,但是为了给用户比较好的体验和方便,我们给函数提供了一套默认的参数,这样对用户来说很爽。

  • 当用户慢慢的对你的产品熟悉了,他希望自己调整参数,就可以直接去设参数.其实跟照相机里面的自动模式和手调模式一个道理.

3.关键字参数

在调用函数的时候,我们希望传递的参数不是僵硬的通过位置来传递,能够有一定的灵活性,能通过变量名进行匹配.

接着说难点的:关于任意数量参数

先看一个打印分数的函数,这个函数设计的比较死板,看python是如何解决的,然后引出我们的话题

def printScore(msg,values):

if not values:

print msg

else:

values_str=', '.join(str(x)for x in values)

print (‘{},{}’.format(msg,values_str))

printScore(‘My scores are’,[100,90])

>>My scores are,100, 90

printScore(‘My scores are’,[])#那怕你不想输入分数,也必须输入一个空的列表

>>My scores are

  • 大家仔细看这个打印log的函数,它一个固定参数个数的函数,这个函数接受两个参数:一个message,一个values。

  • 准确的说是必须要接受两个参数,这样就很死板,比如我只需要打印一个消息,但是调用的人必须要上面一样,哪怕你传入的是一个空列表。

  • 这种写法既麻烦,又显的有点乱,有没有办法把第二个参数完全省略掉. 有的,python设计者设计了可变函数参数功能,也就是我们的第4种方式

4.任意多个位置参数的函数

python有两种方式声明可变参数,我们先说第一种:

在printScore函数中,我们做一小丢丢的改动,我们在参数values前面加*,变成(msg,*values),表示只有第一个参数的msg是调用者必须要指定的,该参数后面,可以跟任意数量的位置参数(主要是任意数量,当然包含懒人专用的省略不写拉)

def printScore(msg,*values):

if not values:

print msg

else:

values_str=', '.join(str(x)for x in values)

print (‘{},{}’.format(msg,values_str))

printScore(‘My scores are’)

>>My scores are

是不是很爽,刚才说任意数量,我们加多个参数试试看:

printScore(‘My scores are’,100,90,80)

>>My scores are,100, 90, 80

一下把100,90,80都打印出来呢,是怎么做到的,是因为python会自动把*操作符后面的形参变成元组传给函数.

5.任意多个关键字形式的参数

python有两种方式声明可变参数,我们接着说第二种:如何能接受任意数量的关键字参数,是用**双星号操作符来表示

其实就是把**后面的变量参数,按照字典来处理,传递给函数.

综合例子:

好最后拿一个综合例子结尾:(包含了关键字参数,默认参数,可变任意数量参数)

def total(initial=5,*numbers,**keywords):

count=initial

for number in numbers:

count+=number

for key in keywords:

count+=keywords.get(key)

return count

print total(10,1,2,3,apple=50,orange=100)

>>166


以上就是“5步教你搞清函数参数传递,就这么简单”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值