Python从零开始系列连载(26)——Python特色数据类型(函数)(上)

浏览: 5642

前言

前文传送门:

Python从零开始系列连载(1)——安装环境

Python从零开始系列连载(2)——jupyter的常用操作(上)

Python从零开始系列连载(3)——jupyter的常用操作(中)

Python从零开始系列连载(4)——jupyter的常用操作(下)

Python从零开始系列连载(5)——Python的基本数据类型(上)

Python从零开始系列连载(6)——Python的基本数据类型(中)

Python从零开始系列连载(7)——Python的基本数据类型(中二)

Python从零开始系列连载(8)——Python的基本数据类型(下)

Python从零开始系列连载(9)——Python的基本运算和表达式(上)

Python从零开始系列连载(10)——Python的基本运算和表达式(中)

Python从零开始系列连载(11)——Python的基本运算和表达式(中二)

Python从零开始系列连载(12)——Python的基本运算和表达式(下)

Python从零开始系列连载(13)——Python程序的基本控制流程(上)

Python从零开始系列连载(14)——Python程序的基本控制流程(中) 

Python从零开始系列连载(15)——Python程序的基本控制流程(中二)

Python从零开始系列连载(16)——Python程序的基本控制流程(下)

Python从零开始系列连载(17)——Python特色数据类型(列表)(上)

Python从零开始系列连载(18)——Python特色数据类型(列表)(中)

Python从零开始系列连载(19)——Python特色数据类型(列表)(下)

Python从零开始系列连载(20)——Python特色数据类型(元组)(上)

Python从零开始系列连载(21)——Python特色数据类型(元组)(下)

Python从零开始系列连载(22)——Python特色数据类型(字典)(上)

Python从零开始系列连载(23)——Python特色数据类型(字典)(下)

Python从零开始系列连载(24)——Python特色数据类型(集合)(上)

Python从零开始系列连载(25)——Python特色数据类型(集合)(下)


AV8D

国庆玩的爽不


是不是刷刷朋友圈就像看遍了祖国大好河山~


说好的此地空余黄鹤楼,结果黄鹤楼被人山人海包围啦, '空余' 两字没体现出啊!

图片.png


已经6天没更新啦~


收收心,该继续学习啦


函数


说到函数,如果你没有编程基础,可能马上会想到初高中学过的:

y = f(x)

例如:y = x +1

当我们 x = 1时,y = 2

x = 2,y = 3


小明:老湿,我们不是初中生!


函数可以将问题简化,我们可以重复使用这个函数解决 y = x + 1 这一类问题


所以,函数就是那些做成重复使用的程序代码


函数的定义


函数是由函数名、参数和函数体组成,格式如下:


def 函数名(形式参数):

函数体

[ return 返回值 ]


def是系统关键字,之后的文章会系统讲一下,这里只要知道这个是用来定义函数的


如果是你自己定义函数,函数名要符合变量命名规则,并且不能是系统关键字(在jupyter中,打出系统关键字是绿色的)


图片.png


例如,我们定义一个求两个数的和的函数:


图片.png


看,这里的 def 和 return 是绿色的,也就是系统关键字


这里函数名是add(英语是求和的意思)

然后有两个形式参数,a和b

函数体部分执行的是 c = a +b

最后函数返回的是 c 的值


这就完成了一个求和函数的定义


函数的调用


函数的调用很简单,我们只要根据函数的定义形式

将实际计算时的参数值传进去就行(也可能没有参数)


函数调用格式:


函数名(实际参数)


图片.png


这里的 add(3,4) 就是函数调用


实际参数分别是 3 和 4


当函数调用发生时,才开始执行函数的内容


即给 a 赋值为 3 , b 赋值为 4

然后计算出 c = 7

最后返回 c 的值 7


函数调用写的参数是实际参数(‘实际’体现在参数是实际执行函数使用的)

函数定义写的参数是形式参数(‘形式’体现在他只是个格式和形式,真正函数执行时候还是先看实际参数)


其实,Python有很多内置函数,例如我们之前课程常常使用的print()

print()函数是内置的,所以不用定义


内置:安装好Python就有的


还记得以前手机很多内置吸费软件么


点进去xxx软妹币就没了,手机短信提示欠费了


图片.png


参数的传递


函数调用时候,是将实际参数传递给形式参数


函数参数的传递方法有很多


1.参数按照位置顺序传递

刚才的add函数就是这种,按顺序,3传递给a,4传递给b

图片.png


2.参数按赋值传递

图片.png


这里定义了一个两数相减的函数


注意到函数调用时候,指明了 b = 4 , a = 3

是一种赋值,所以这里的就和上个相加的例子中顺序传递参数不一样了


3.参数按照默认值传递

有时候,可以在函数定义里给函数形参设定一个默认值

当函数实参没有传递值进来,就使用默认值


图片.png


这里在定义函数时候,给形参 b 设置了默认值 2


然后调用函数时候,只传递了一个参数值 4


则python默认将 4 传递给 a,因为在定义时候给 b 设定了默认值 2


当然,当传入的参数是两个时候,则覆盖掉默认值,即不使用定义时候的默认参数值


图片.png


4.(难点)元组类型的变长度参数传递


我们写个打印输出的函数


图片.png


如果我们要打印三个数怎么办?


小明:老湿,我知道!我们可以这样!

图片.png


小明:图片.png


很好!小明,如果我们要打印1000个数呢


小明:emmmm


图片.png

【敲黑板】


我们可以定义一个变长参数,可长可短,你懂的!【坏笑


小明: 这不是去幼儿园的车!我要下车! 图片.png


我们可以在参数前面加一个星号 *  ,表示这个参数是可变长参数

当其他参数赋值完毕时候,剩下的参数依次赋值给这个可变长参数


所以刚才的可以这样实现:


图片.png


但是,注意到没有,这里的 b 是元组 (2,3)

所以你执意要打印出,可以提前修改函数的打印功能


图片.png


这就通用了,不信你试试:


图片.png


相当于将字典的每个元素依次拿出来


5.(难点)字典类型的变长度参数传递

我们可以在参数前面加两个星号 **  ,表示这个参数是可变长参数

是以 实参名=字典值的方式传递


例如刚才的例子,我们改一下


图片.png


注意到,字典类型变长参数传递一定是赋值形式传递进去的


当然,元组和字典形式变长参数也可能用不到,例如:


图片.png


这样,打印出的就是空元祖和空字典啦~


如果你执意要实现那种打印形式,我们就改一下函数:


图片.png


c [ j ] 指的是打印 j 这个键对应的值,如果不这样写,结果会是这样,打印出的是键:


图片.png


注意,可变参数的位置一般写在最后,不能乱了顺序,否则会报错!!!


图片.png


今天作业是自己跟着操作一遍~

自己不敲代码永远学不会写代码


下课


人生苦短,我选Python

未完待续,连载中......


现在还坚持再看连载学习的你们真的很棒棒!

入门部分已经学完大部分啦!加油


下一篇:Python从零开始系列连载(27)——Python特色数据类型(函数)(中)

推荐 5
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

12 个评论

def dayin(a,*b):
print(a,end = '')
print(' ',end ='')
for i in b:
print(i,end = '')
print(' ',end = '')


为什么有print(a,end = '')
print(' ',end ='')??

详细的意义呢,能解释下吗,
def dayin(a,*b):
for i in b:
print(i,end='')
print(' ',end='')
print(1,2,3,4,5)

我这样也能打印出如下的效果
1 2 3 4 5
def dayin(a,*b):
for i in b:
print(i,end='')
print(' ',end='')
dayin(1,2,3,4,5)

这样怎么显示是2 3 4 5
d&y

d&y 回复 d&y

print和dayin的区别是什么呢
print是系统函数 dayin是定义的函数
老师您好,我在元祖变长参数这里有个问题。
print (a, end = '')
print (' ', end = '') 为什么要这么写呢?
我直接print (a, end = ' '),直接用空格作为分隔,后面的i同理,舍掉后面的那行代码可以吗?谢谢
你试试 效果一样即可
>>> def hanshu(a,*b,**c):
... print(a,b,c)
...
>>> hanshu(1,(22,33),{'tom':45,'user':23})
1 ((22, 33), {'tom': 45, 'user': 23}) {}

元组后边的集合只能写‘tom’=22这种形式的嘛?
你这个写法 你看你的输出 你的字典也在元组型中输出的 而最后跟着的空字典说明字典形式传入的内容为空
如果我们要打印1000个数呢?后面还是要赋值 dayin(1,2,3,4,.............1000), dayin(1,2,3,4,.............1000)这个改怎么表达呢? in range(1,1000)行不行?
ef dayin(a,*b):
print(a,end=" ")
for i in b:
print(i,end=" ")
dayin(1,2,3,4,5,6,'a')
1 2 3 4 5 6 a
def dayin(a,*b):
print(a,end=" ")
for i in b:
print(i,end=" ")

要回复文章请先登录注册