首页 > 编程语言 >一辆车帮你读懂python函数

一辆车帮你读懂python函数

时间:2023-02-09 16:24:02浏览次数:46  
标签:newdream 函数 python age 读懂 参数 一辆车 print def

 

函数的概念:
有一个超市,a要去买西,走一段距离,b去买东西走一段距离,c去买东西也走一段距离,于是就有了公交车,abc都可以搭这一趟公交车去超市买东西,这里的公交车就是函数。函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

 

函数的作用:

后面超市所在的位置扩建,有了菜市场、公园,相应的公交车把站台调整一下即可达到目的地。这样就在节约了人力做重复工作的同时还可以因为扩建而自由的调整公交站线路,这就是在函数里体现的作用----方便扩展、节约代码、提高代码复用性

 

函数的定义:

def function(params):
block return expression/value

 

(1)在Python中采用def(define)关键字进行函数的定义,不用指定返回值的类型。
(2)函数参数params可以是零个、一个或者多个,同样的,函数参数也不用指定参数类型,因为在Python中变量都是弱类型的,Python会自动根据值来维护其类型。
(3)return语句是可选的,它可以在函数体内任何地方出现,表示函数调用执行到此结束;如果没有return语句,会自动返回NONE,如果有return语句,但是return后面没有接表达式或者值的话也是返回NONE。


调用函数语法:

函数名(参数表)


举例:
def printme():
'''函数体只用来实现打印语句'''
print("Hello")

printme() #函数的调用

输出:
Hello


函数中的相关概念:

形参、实参:

公交车里有老弱病残孕的专坐,有司机专用座,这些在形式上的一个安排,这些坐位就是函数中的形式参数,简称形参;具体坐什么人在函数中叫实际参数,并不是所有坐在这些坐位上的都是老弱病残,具体要看实际所坐的是什么人。

-----函数后面跟的是形参;实际传的是实参

 

举例:

def add(a,b): #a、b是形参
'''函数体用来实现两位数的加法'''
return a+b

print(add(1,5)) #实参


值传递、引用传递:

搭车买票有两种方式,一种人工售票,上车前买好票,然后拿着票上车,不管上车后是剪票还是收费的形式,这个票跟对象(上车的人)所拥有的钱或是其它都没关系,这是值传递;另一种买票方式就是直接刷卡,根据车费的金额直接刷卡,这个刷卡会直接影响卡上的余额,这种就是引用传递;
------传递修改值不影响本身对象的值;引用传递修改就是修改本身的值


举例1:

def changenum(numa):
'''值传递:传递的是另一个复制的对象,不会影响本对象的值'''
numa = 20
numb = 10
changenum(numb);
print(numb)

输出
10

举例2:
def changenum1(list1):
'''引用传递:传递的是指向对象的地址,修改会影响对象的值'''
list1.append(0)

list2 = [1,2,6,8]
changenum1(list2)
print(list2)

输出
10
[1, 2, 6, 8, 0]

函数的参数类型:

必备类型

不管是公交车还是其它车,车上的每个零件都有自己的作用,假设一个坐位需要大小不一的4个螺丝来固定,如果只拧3个(必须按传指定参数的个数)或没有按指定大小(按顺序传参)拧螺丝,那么坐位必然就会有倒的风险。
-----这种参数通过位置、依次进行匹配的类型叫必备类型


举例:

def printMe(name,age):
'''必备类型:参数个数与位置都严格匹配'''
print("我叫"+name+",我今年"+str(age)+'岁')

printMe('newdream',19)

输出
我叫newdream,我今年19岁

关键字类型
领导出席活动都有陪同一起,出席时,要么就按顺序先站好再入场就坐(不按关键字,按顺序),要么就直接入场后按名字进行就坐(按关键字指定参数)
-----用参数的命名确定传入的参数值,Python解释器能够用参数名匹配参数值


举例:

def printMe(name,age):
'''关键字类型,一般都指定关键字(不指定关键字也允许)'''
print("我叫"+name+",age的值是"+str(age))

printMe('newdream',7) #不指定关键字
printMe(name = 'newdream',age = 7) #指定关键字

 

输出
我叫newdream,age的值是7
我叫newdream,age的值是7

3.不定长类型
大巴士的坐位是固定的,如果赶上春运那么以往的班次是远远不能满足客运量的,于是就允许在过道上添加一些板凳充当临时坐位,这样就可以一次性上更多的旅客(可以一次性传多个参数),而不用增加班车的次数(不用重新再定义函数)。
-----’*‘ 和’ ** ‘表示能够接受0到任意多个参数,’ * '表示将没有匹配的值都放在同一个元组中; ’ ** '表示将没有匹配的值都放在一个dictionary中。


举例1:

def busCustomer1(a,*args):
'''不定长类型:允许一次性传一个或多个的参数类型
*:将没有匹配的参数放到一个元组中
'''
print("第一个参数是",a)
for i in args:
print(i,end=' ')
busCustomer1(16)
busCustomer1(1,5,7,9,2,'a',True)

输出
第一个参数是 16
第一个参数是 1
5 7 9 2 a True

举例2:
def busCustomer2(a,**args):
'''不定长类型:允许一次性传一个或多个的参数类型
**:将没有匹配的参数放到一个字典中'''
print("第一个参数是",a)
for i in args:
print("%s %s"%(i,args[i]))
busCustomer2(1,a1='a',a2='c')

输出
第一个参数是 1
a1 a
a2 c

4.缺省类型
搭公交车,会买票,中途N个站,可以自由选择下车站点(可以选择传参),如果搭过头了或是忘记下车了,就终点站下(参数的默认值)
------缺省参数的值如果没有传入,则被认为是默认值。且需注意的是,默认值参数应该放在参数的最后一个


举例:

def defaultArgu(name,age = 19):
'''缺省类型:当没有传参时取默认值,传参了则以参数的值为准
'''
print("我叫"+name+",今年"+str(age))

defaultArgu('newdream')
defaultArgu('newdream',25)

输出
我叫newdream,今年19
我叫newdream,今年25

匿名函数类型
如果说函数是公交车,那么匿名函数就是一辆自行车,在构造上(函数的定义)与功能上(只能是一个表达式)要单一的多
----使用 lambda 来创建匿名函数。

标签:newdream,函数,python,age,读懂,参数,一辆车,print,def
From: https://www.cnblogs.com/xmxit/p/17105682.html

相关文章

  • OpenCV—python 基于傅里叶变换的图像矫正
    基于傅里叶变换的图像矫正importcv2importnumpyasnpimportmathdeffourier_demo():#1、灰度化读取文件,img=cv2.imread('english_rotation.jpg'......
  • Centos7 Python2.7升级3.6.9之靠谱教程
    Python2.7现在已经正式被放弃了,运行会报错,所以得玩Python3版本了;这里分享Centos7系统下将Python2.7升级3.6.9的方法,非常靠谱本人刚刚测试通过,看了老外的教程;简单三......
  • 用c编译 php/python拓展(swig生成PHP扩展)
    https://blog.csdn.net/cuxiong8996/article/details/107153840 swig生成了PHP的扩展:https://blog.csdn.net/weixin_39622419/article/details/1160659781、安装swig......
  • Python面试_可迭代对象&迭代器&生成器
    #可迭代对象&迭代器>**可迭代对象**:使用内置的iter()函数可以获取迭代器的对象。如果对象实现了能返回迭代器的__iter__方法,那么对象就是是可迭代的。序列都可以迭代;实......
  • CentOS安装python3
    一、安转相关依赖使用yuminstallgccpatchlibffi-develpython-develzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-devel......
  • python之路67 drf从入门到成神 8 接口文档、jwt介绍和原理、drf-jwt快速使用、定制返
    接口文档前后端分离我们做后端,写接口前端做前端,根据接口写app、pc、小程序作为后端来讲、我们很清楚,比如登录接口/api/v1/login/----》post-------》us......
  • 凑个小热闹:python采集《狂飙》评论
    2023年首部爆款剧集《狂飙》一度冲上热搜第一,害的我两倍速熬夜看完了。  “是非面前稍不留神,就会步入万丈深渊,唯有坚守信仰,才能守得初心”  面对这么多广大网......
  • python数据抓取,抓点星星网的内容
    代码:#coding=utf-8importos,sys,reimportrequestsfromwebob.excimportstrip_tagsfromxpinyinimportPinyindefstr2dict(str):dict={}groups1......
  • Python-celery介绍与快速上手
    1.celery介绍:  celery是一个基于Python开发的模块,可以帮助我们在开发过程中,对任务进行分发和处理。            详细介绍取自:Python之celery的简介与使......
  • Python之ruamel.yaml模块详解(一)
    (Python之ruamel.yaml模块详解(一))1ruamel.yaml简介ruamel.yaml是一个yaml解析器;ruamel.yaml是一个用于Python的yaml1.2加载器/转储程序包;它是PyYAML3.11的衍生产品;r......