python函数基础知识_第1页
python函数基础知识_第2页
python函数基础知识_第3页
python函数基础知识_第4页
python函数基础知识_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

函数介绍

v1>什么是函数

请看如下代码:

print("_ooOoo_")

print("088888880")

print("88.88")

print("(|I)")

print("0\\-/O")

print("____/'---'W")

print(".'\\||//-)

print("/Will:III//\\")

print("/_lllllHill-W")

printC||WWW-///II")

print("|\\_|II")

print("\\_/--/")

printC-/-----\\*.._")

print(".........<_\\_<|>_/_.")

printCII:'-W'.J'W_/';•*/-':II")

print("\\\\\\____\\/____/.-'//")

print("======-.____\\/_.-'======")

print("、.....'")

print("")

print("...........................................................................................")

print("佛祖镇楼BUG辟易")

print("佛日:")

print("写字楼里写字间,写字间里程序员;")

print("程序人员写程序,又拿程序换酒钱。")

print("酒醒只在网上坐,酒醉还来网下眠:")

print("酒辞酒醐日红日,网上网下小更年。“)

print("但愿老死电脑间,不愿鞠躬老板前:")

print("奔驰宝马贵者趣,公交自行程序员。“)

print("别人笑我忒疯撤,我笑自己命太贱;")

print("不见满街漂亮妹,哪个归得程序员?")

想一想:

如果一个程序在不同的地方需要输出“佛祖镇楼”,程序应该怎样

设计?

if条件1:

输出,佛祖镇楼,

...(省略)...

if条件2:

输出,佛祖镇楼,

...(省略)...

如果需要输出多次,是否意味着要编写这块代码多次呢?

小总结:

如果在开发程序时,需要某块代码多次执行。为了提高编写的效率以及

更好的维护代码,需要把具有独立功能的代码块组织为一个小模块,这就是函

数。

函数定义和调用

一、定义函数

定义函数的格式如下:

def函数名():

代码

示例:

#定义一个函数,能够完成打印信息的功能defprintlnfo():

print('.............................................................................')

printC人生苦短,我用Python')

print(*............................................................................')

二、调用函数

定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能

够执行,需要调用它

调用函数很简单的,通过函数名()即可完成调用

#定义完函数后,函数是不会自动执行的,需要调用它才可以

printlnfo()

三、注意:

函数定义好以后,函数体里的代码并不会执行,如果想要执行函数体里

的内容,需要手动的调用函数。

每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完

毕后,意味着调用结束了。

当然了如果函数中执行到了return也会结束函数。

函数参数(一)

思考一个问题,如下:

现在需要定义一个函数,这个函数能够完成2个数的加法运算,

并且把结果打印出来,该怎样设计?下面的代码可以吗?有什么

缺陷吗?

defadd2num():

a=11

b-22

print(c)

为了让一个函数更通用,却想让它计算哪两个数的和,就让它计算哪两个数的

和,在定义函数的时候可以让函数接收数据,就解决了这个问题,这就是函

数的参数

一、定义、调用带有参数的函数

定义一个add2num(a,b)函数,来计算仟意两个数字之和:

defadd2num(a,b):

printc

add2num(ll,22)#也的函数时,L;小.也通以掳

注意点:

在定义函数的时候,小括号里写等待赋值的变量名

在调用函数的时候,小括号里写真正要进行运算的数据

调用带有参数函数的运行过程:

#定义接收2个参数的函数

defadd2num(a,b):

c=a+b

printc

。调用带有参数的函数

add2num(110,22)

终端

—维一维

要求:定义一个函数,完成前2个数完成加法运算,然后对第3个数,进行减

法;然后调用这个函数

使用def定义函数,要注意有3个参数

调用的时候,这个函数定义时有几个参数,那么就需要传递几个参数

三、调用函数时参数的顺序

>>>deftest(a,b):.print(a,b)...>>>test(l,2)#七因参数12>>>test(b・l,a・2)#

i»>»>test(b=,)h

File"<stdin>",line1

SyntaxError:positionalargumentfollowskeywordargument

四、小总结

定义时小括号中的参数,用来接收参数用的,称为“形参”

调用时小括号中的参数,用来传递给函数用的,称为“实参”

函数返回值(一)

一、“返回值”介绍

现实生活中的场景:

我给儿子10块钱,让他给我买个冰淇淋。这个例子中,10块钱

是我给儿子的,就相当于调用函数时传递到参数,让儿子买冰淇

淋这个事情最终的目标,我需要让他把冰淇淋带回来,此时冰淇

淋就是返回值

开发中的场景:

定义了一个函数,完成了获取室内温度,想一想是不是应该把这

个结果给调用者,只有调用者拥有了这个返回值,才能够根据当

前的温度做适当的调整

综上所述:

所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果

使用返回值的前提需求就是函数调用者想要在函数外使用计算结果

二、带有返回值的函数

想要在函数中把结果返回给调用者,需要在函数中使用return

如下示例:

defadd2num(a,b):

returnc#return..,;变4

或者

defadd2num(a,b):

returna+b#return.b;

三、保存函数的返回值

在本小节刚开始的时候,说过的“买冰淇淋”的例子中,最后儿子给你冰淇淋时,

你一定是从儿子手中接过来对么,程序也是如此,如果一个函数返回了一个

数据,那么想要用这个数据,那么就需要保存

保存函数的返回值不例如下:

#定义函数defadd2num(a,b):

returna+b

#调用函数,顺便保存函数的返回值

result=add2num(100,98)

#1为为result已经保存了add2num的返回值,所以接下来就可以使用了

print(result)

结果:

198

函数的文档说明

1.基本使用

»>deftest(a,b):...”用来七成时2个坡求和“,"二•个才价中作为函数文档...

print("%d"%(a+b))...>>>>>>test(ll,22)#「内数可以工:常KJJ::33

>>>>>>help(test)#ft11Jhelp雀看test口数的文档说明

Helponfunctiontestinmodule_main_:

test(a,b)

用来完成对2个数求和

使用效果

Documentationforgetinfo(name,age)

day08©

defget_info(name,age)

Inferredtype:(name:Any,age:Any)->str

接收用户的名字和年龄,拼接一个字符串并返回

2.高级使用

defget_info(name:str,age:int):

接收用户的名字和年龄,拼接一个字符串并返回

:paramname:接收一个名字

:paramage:接收用户的年龄,必须是0-200间的一个整数

:return:返网拼接好的字符串

•*HM

return"我的名字叫%s,今年是%d岁"%(name,age)

get_info("吴彦祖",19)

get_info(520,19)#注意,方上的类型只是提高代码的可读性,并不

help(get_info)

使用效果

Documentaticnforget_info(name,age)才

tE>day08中

defget_info(name:str,age:int)

Inferredtype:(name:str,age:int)->str

接收用户的名字和年龄,拼接一个字符串并返同

name:接收一个名字

age:接收用户的年龄,必须年0-200间的•个整数

return:返回拼接好的字符;|;

函数应用:打印图形和数学计算

目标

•感受函数的嵌套调用

•感受程序设计的思路,复杂问题分解为简单问题

思考&实现1

1.写一个函数打印一条横线

2.打印自定义行数的横线

参考代码1

#打印--条桢线defprintOneLire():

print("-"*30)

#打印多条横线defprintNumLire(num):

1=0

#因为printOneLine函数已经完成了打印横线的功能,

#只需要多次调用此函数即可

whilei<num:

printOneLine()

i+=l

printNumLine(3)

思考&实现2

i.写一个函数求三个数的和

2.写一个函数求三个数的平均值

参考代码2

#求3个数的和defsum3Number(a,b,c):

returna+b+c#return的L;口一数值,也可是•1■

#完成对3个数求平均值defaverage3Number(a,b,c):

#因为sum3Number函数已经完成了3个数的就和,所以只需调用即可

#即把接收到的3个数,当做实参传递即可

sumResult-sum3Number(a,b,c)

aveResult=sumResult/3.0

returnaveResult

#调用函数,完成对3个数求平均值

result=average3Number(11,2,55)

print("averageis%d"%result)

函数的嵌套调用

deftestB():

print('--testBstart-—')

print(,这里是testB函数执行的代码...(省略)...’)

print。----testBend----')

deftestA():

print('--testAstart-—')

testB()

print("--testAend-—')

testA()

结果:

--testAstart--

--testBstart--

这里是testB函数执行的代码...(省略)...

--testBend--

--testAend--

小总结:

一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用

.)

如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执

行完毕之后才会回到上次函数A执行的位置

函数高级

局部变量

局部变量,就是在函数内部定义的变量

其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部

是不能使用的

因为其作用范围只是在自己的函数内部,所以不同的函数可以定义相同

名字的局部变量(打个比方,把你、我是当做成函数,把局部变量理解为每个

人手里的手机,你可有个iPhone8,我当然也可以有个iPhone8了,互不相

关)

局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储

当函数调用时,局部变量被创建,当函数调用完成后这个变量就不能够

使用了

如下图所示:

est.py-SublimeText

totpy

Q"python@)ubuntu:"/Desktop

1coding=utf-8

2pythongubuntu:-/Desktopspython3test.py

.…testl-修改jfi..a=3ee

3defJestlO:

[a=3典

4•—test3-—a=4O0

5(a)pythongubuntu:*/Desktops

6a二266

7pr:rr('一—testl一佬之后一a=%(Ta)

8

9defJest2():

ie[a=4R].

11print('----test3----a=%d1a)

12

13

14#调用函豌

15testK)

16test2()

17

全局变量

如果i个变量,既能在i个函数中使用,也能在其他的函数中使用,这样的变

量就是全局变量

打个比方:有2个兄弟各自都有手机,各自有自己的小秘密在手机里,不让

另外一方使用(可以理解为同部变量);但是家里的电话是2个兄弟都可以随

便使用的(可以理解为全局变量)

#定义全局变量

a100

deftestl():

print(a)#,

deftest2():

print(a)#虽然没有定义变量a但是依然可以获取其数掂

#调用函数

tcotl()

test2()

运行结果:

python@ubuntu:~/Desktop$python3test.py

100

100

总结1:

在函数外边定义的变量叫做全局变量

全局变量能够在所有的函数中进行访问

全局变量和局部变量名字相同问题

看如下代码:

1#codinq二-Qpython^ubuntu:*/Desktop

pythonQubuntu:-/Desktopspython3test.py

3•—testl••修改葡•・a=3。。

1

4---------------------・・・・testl-修政后•

5deftestl():--test3--a=ieo

python0ubuntu:~/Desktop$

a=300

9print('a)

10a=200

11printC----testl--j5gjyg--a=%d'a)

1•)

13deftest2():

14print('----test3--a=%d'a)

15

16

17

18testlO

19test2()

总结2:

当函数内出现局部变量和全局变量相同名字时,函数内部中的变量名

数据此时理解为定义了一个局部变量,而不是修改全局变量的值

修改全局变量

函数中进行使用时可否进行修改呢?

代码如下:

cst.py•SublimeText

■,tettpy.

1#coding=utf-8O-python(g)ubuntu:"/Desktop

python^ubuntu:-£C>esktop$python3test.py

3a-100…-testl••修改曲-a=16。

4

5deftestl():----test3----8=266

6|-------------------------------1python0ubuntu:*/C«sktop$|

globala

8l------------------------------1

pr-('••••testl一修改前一a=%d'a)

iea=200

pnni「..一testl…修改后-.a=%d'a)

13deftest2():

prnr('....test3----a=^d'a)

15

16

17#遍用函数

18testlO

19test2()

总结3:

如果在函数中出现global全局变量的名字那么这个函数中即使出现和全局

变量名相同的变量名=数据也理解为对全局变量进行修改,而不是定义局部变量

如果在一个函数中需要对多个全局变量进行修改,那么可以一次性全部

声明,也可以分开声明

globalX.V]globala,bglobal人的#

globala#globalb

查看所有的全局变量和局部变量

Python提供了两个内置函数globals()和locals。可以月来查看所有的全局变量

和局部变量。

deftest():

a=100

b=40

print(locals())#{'a':100,'b':40}

test()

x='good'

y=True

print(globals())#{'_name_':'_main__doc_':None,'_package_':

函数返回值

在python中我们怎样返回多个值?

一、多个return?

defcreate_nums():

print,'-1一")

return1#函数中下面的代码不会被执行,因为

return除了能够将数据返回之外,还有一个隐臧的功能:结

束函数

print(H—2—M)

return2

printC—3—")

总结1:

一个函数中可以有多个return语句,但是只要有一个return语句被执行到,那

么这个函数就会结束了,因此后面的return没有什么用处

如果程序设计为如下,是可以的因为不同的场景下执夕亍不同的return

defcreate_nums(num):

print("-1—H)

ifnum==100:

print(H—2—H)

returnnum+1#函数中下面的代码不会被执

行,因为return除了能够将数据返回之外,还有一个隐藏

的功能:结束函数

else:

print("-3—H)

returnnum+2

print("-4—H)

resultl=create_nums(100)

print(resultl)#打印101

result2=create_nums(200)

print(result2)#打印202

二、一个函数返回多个数据的方式

defdivid(a,b):

shang=a//b

yushu=a%b

returnshang,yushu#默认是元组

result=divid(5,2)

print(result)#输出(2,1)

总结2:

return后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就

可以一次性返回多个数据。

deffunction():

#return[1,2,3]

#return(1,2,3)

returnfnuml":1,"num2":2,”num3":3}

如果return后面有多个数据,那么默认是元组。

对返回的数据直接拆包

defget_my_info():

high=178

weight=100

age=18

returnhigh,weight,age#函数返回三个数据,会自

动打包为元组

#result=get_my_info()#result接收到一个元组

#print(result)

my_high,my_weight,my_age=get_my_info()#直接把

元组拆分为二个变量来使用,更加方便

print(my_high)

print(my_weight)

print(my_age)

总结:

拆包时要注意,需要拆的数据的个数要与变量的个数相同,否则程序会

异常

除了对元组拆包之外,还可以对列表、字典等拆包

In[17]:a,b=(11,22)

In[18]:a

Out[18]:11

In[19]:b

Out[19]:22

ln[20]:a,b=[11,22]

In[21]:a

Out[21]:11

In[22]:b

Out[22]:22

ln[23]:a,b={Hm',:11,"nM:22)#取出来的是key,而不是

键值对

In[24]:a

Out[24]:'m,

In[25]:b

Out[25]:H

函数参数详解

一、缺省参数

调用函数时,缺省参数的值如果没有传入,则取默认值。

下例会打印默认的age,如果age没有被传入:

defprintinfo(name,age=35):

#打印任何传入的字符串

print("name:%s"%name)

print("age%d"%age)

#调用printinfo函数

printinfo(name="miki,')#在函数执行过程中age取默认值35

printinfo(age=Jname="miki")

以上实例输出结果:

name:miki

age:35

name:miki

age:9

总结:

在形参中默认有值的参数,称之为缺省参数

注意:带有默认值的参数一定要位于参数列表的最后而

>>>defprintinfo(name,age=35,sex):

printname

File"<stdin>",line1

SyntaxError:non-defaultargumentfollowsdefaultargument

二、不定长参数

有时可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数,声明

时不会命名。

基本语法如下:

deffunctionnameCtformal-args,]*args,**kwargs):

函数—文档字符串"""

function_suite

return[expression]

注意:

加了星号(*)的变量args会存放所有未命名的变量参数,args为元组

而加**的变量kwargs会存放命名参数,即形如key=value的参数,kwargs为字

典.

deftest(a,b,"args,**kwargs):

"函数在声明时,需要两个参数”

print('a={),b={},args={}>kwargs={}'.format(aargs,kwa"gs))

test(2,3,•你好"hi','howdoyoudo',name="zhangsan",age=18)#a=2,b=3,args=('你好

'hi','howdoyoudo'),kwargs={'name':'zhangsan','age':18}

b-('hi','大家好・,’今天天气真好・)

d-{'name':"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论