Python 函数 - 菜鸟教程
文章推薦指數: 80 %
函数能提高应用的模块性,和代码的重复利用率。
你已经知道Python提供了许多内建函数,比如print()。
但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数你 ...
菜鸟教程--学的不仅是技术,更是梦想!
首页
HTML
CSS
JavaScript
Vue
Bootstrap
NodeJS
Python3
Python2
Java
C
C++
C#
Go
SQL
Linux
jQuery
本地书签
首页
HTML
CSS
JS
本地书签
Search
Python3教程
Python2教程
Vue3教程
vue2教程
Bootstrap3教程
Bootstrap4教程
Bootstrap5教程
Bootstrap2教程
Python基础教程
Python基础教程
Python简介
Python环境搭建
Python中文编码
Python基础语法
Python变量类型
Python运算符
Python条件语句
Python循环语句
PythonWhile循环语句
Pythonfor循环语句
Python循环嵌套
Pythonbreak语句
Pythoncontinue语句
Pythonpass语句
PythonNumber(数字)
Python字符串
Python列表(List)
Python元组
Python字典(Dictionary)
Python日期和时间
Python函数
Python模块
Python文件I/O
PythonFile方法
Python异常处理
PythonOS文件/目录方法
Python内置函数
Python高级教程
Python面向对象
Python正则表达式
PythonCGI编程
PythonMySQL
Python网络编程
PythonSMTP
Python多线程
PythonXML解析
PythonGUI编程(Tkinter)
Python2.x与3.x版本区别
PythonIDE
PythonJSON
Python100例
Python测验
Python日期和时间
Python模块
Python函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
你已经知道Python提供了许多内建函数,比如print()。
但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。
圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return[表达式]结束函数,选择性地返回一个值给调用方。
不带表达式的return相当于返回None。
语法
deffunctionname(parameters):
"函数_文档字符串"
function_suite
return[expression]
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
实例
以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。
实例(Python2.0+)
defprintme(str):
"打印传入的字符串到标准显示设备上"
printstr
return
函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了printme()函数:
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
#定义函数
defprintme(str):
"打印任何传入的字符串"
printstr
return
#调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")
以上实例输出结果:
我要调用用户自定义函数!
再次调用同一函数
参数传递
在python中,类型属于对象,变量是没有类型的:
a=[1,2,3]
a="Runoob"
以上代码中,[1,2,3]是List类型,"Runoob"是String类型,而变量a是没有类型,她仅仅是一个对象的引用(一个指针),可以是List类型对象,也可以指向String类型对象。
可更改(mutable)与不可更改(immutable)对象
在python中,strings,tuples,和numbers是不可更改的对象,而list,dict等则是可以修改的对象。
不可变类型:变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a。
可变类型:变量赋值la=[1,2,3,4]后再赋值la[2]=5则是将listla的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
python函数的参数传递:
不可变类型:类似c++的值传递,如整数、字符串、元组。
如fun(a),传递的只是a的值,没有影响a对象本身。
比如在fun(a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。
可变类型:类似c++的引用传递,如列表,字典。
如fun(la),则是将la真正的传过去,修改后fun外部的la也会受影响
python中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
python传不可变对象实例
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
defChangeInt(a):
a=10
b=2
ChangeInt(b)
printb#结果是2
实例中有int对象2,指向它的变量是b,在传递给ChangeInt函数时,按传值的方式复制了变量b,a和b都指向了同一个Int对象,在a=10时,则新生成一个int值对象10,并让a指向它。
传可变对象实例
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
#可写函数说明
defchangeme(mylist):
"修改传入的列表"
mylist.append([1,2,3,4])
print"函数内取值:",mylist
return
#调用changeme函数
mylist=[10,20,30]
changeme(mylist)
print"函数外取值:",mylist
实例中传入函数的和在末尾添加新内容的对象用的是同一个引用,故输出结果如下:
函数内取值:[10,20,30,[1,2,3,4]]
函数外取值:[10,20,30,[1,2,3,4]]
参数
以下是调用函数时可使用的正式参数类型:
必备参数
关键字参数
默认参数
不定长参数
必备参数
必备参数须以正确的顺序传入函数。
调用时的数量必须和声明时的一样。
调用printme()函数,你必须传入一个参数,不然会出现语法错误:
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
#可写函数说明
defprintme(str):
"打印任何传入的字符串"
printstr
return
#调用printme函数
printme()
以上实例输出结果:
Traceback(mostrecentcalllast):
File"test.py",line11,in
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。
以下实例在函数printme()调用时使用参数名:
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
#可写函数说明
defprintme(str):
"打印任何传入的字符串"
printstr
return
#调用printme函数
printme(str="Mystring")
以上实例输出结果:
Mystring
下例能将关键字参数顺序不重要展示得更清楚:
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
#可写函数说明
defprintinfo(name,age):
"打印任何传入的字符串"
print"Name:",name
print"Age",age
return
#调用printinfo函数
printinfo(age=50,name="miki")
以上实例输出结果:
Name:miki
Age50
默认参数
调用函数时,默认参数的值如果没有传入,则被认为是默认值。
下例会打印默认的age,如果age没有被传入:
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
#可写函数说明
defprintinfo(name,age=35):
"打印任何传入的字符串"
print"Name:",name
print"Age",age
return
#调用printinfo函数
printinfo(age=50,name="miki")
printinfo(name="miki")
以上实例输出结果:
Name:miki
Age50
Name:miki
Age35
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。
这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。
基本语法如下:
deffunctionname([formal_args,]*var_args_tuple):
"函数_文档字符串"
function_suite
return[expression]
加了星号(*)的变量名会存放所有未命名的变量参数。
不定长参数实例如下:
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
#可写函数说明
defprintinfo(arg1,*vartuple):
"打印任何传入的参数"
print"输出:"
printarg1
forvarinvartuple:
printvar
return
#调用printinfo函数
printinfo(10)
printinfo(70,60,50)
以上实例输出结果:
输出:
10
输出:
70
60
50
匿名函数
python使用lambda来创建匿名函数。
lambda只是一个表达式,函数体比def简单很多。
lambda的主体是一个表达式,而不是一个代码块。
仅仅能在lambda表达式中封装有限的逻辑进去。
lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法
lambda函数的语法只包含一个语句,如下:
lambda[arg1[,arg2,.....argn]]:expression
如下实例:
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
#可写函数说明
sum=lambdaarg1,arg2:arg1+arg2
#调用sum函数
print"相加后的值为:",sum(10,20)
print"相加后的值为:",sum(20,20)
以上实例输出结果:
相加后的值为:30
相加后的值为:40
return语句
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。
不带参数值的return语句返回None。
之前的例子都没有示范如何返回数值,下例便告诉你怎么做:
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
#可写函数说明
defsum(arg1,arg2):
#返回2个参数的和."
total=arg1+arg2
print"函数内:",total
returntotal
#调用sum函数
total=sum(10,20)
以上实例输出结果:
函数内:30
变量作用域
一个程序的所有的变量并不是在哪个位置都可以访问的。
访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。
两种最基本的变量作用域如下:
全局变量
局部变量
全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
如下实例:
实例(Python2.0+)
#!/usr/bin/python
#-*-coding:UTF-8-*-
total=0#这是一个全局变量
#可写函数说明
defsum(arg1,arg2):
#返回2个参数的和."
total=arg1+arg2#total在这里是局部变量.
print"函数内是局部变量:",total
returntotal
#调用sum函数
sum(10,20)
print"函数外是全局变量:",total
以上实例输出结果:
函数内是局部变量:30
函数外是全局变量:0
Python日期和时间
Python模块
12篇笔记
写笔记
#0 blingcoin zha***[email protected]全局变量想作用于函数内,需加global
#!/usr/bin/python
#-*-coding:UTF-8-*-
globvar=0
defset_globvar_to_one():
globalglobvar#使用global声明全局变量
globvar=1
defprint_globvar():
print(globvar)#没有使用global
set_globvar_to_one()
printglobvar#输出1
print_globvar()#输出1,函数内的globvar已经是全局变量
1、global---将变量定义为全局变量。
可以通过定义为全局变量,实现在函数内部改变变量值。
2、一个global语句可以同时定义多个变量,如globalx,y,z。
blingcoin blingcoin zha***[email protected]年前(2017-04-26)
#0 BMPixel 194***[email protected]列表反转函数:
#!/user/bin/python
#-*-coding:UTF-8-*-
defreverse(li):
foriinrange(0,len(li)/2):
temp=li[i]
li[i]=li[-i-1]
li[-i-1]=temp
l=[1,2,3,4,5]
reverse(l)
print(l)
BMPixel BMPixel 194***[email protected]年前(2017-05-06)
#0 King kin***63.com27列表反转函数二:
defreverse(ListInput):
RevList=[]
foriinrange(len(ListInput)):
RevList.append(ListInput.pop())
returnRevListKing King kin***63.com5年前(2017-07-18)
#0 songy son***[email protected]简化列表反转:
defreverse(li):
foriinrange(0,len(li)/2):
li[i],li[-i-1]=li[-i-1],li[i]
l=[1,2,3,4,5]
reverse(l)
print(l)
songy songy son***[email protected]年前(2017-08-29)
#0 shiyeweimian 860***[email protected] 参考地址29关于returnfun和returnfun()的区别:
>>>deffunx(x):
deffuny(y):
returnx*y
returnfuny#returnfuny返回的是一个对象,可理解为funx是funy的一个对象
>>>funx(7)(8)
56
>>>deffunx(x):
deffuny(y):
returnx*y
returnfuny()#returnfuny()返回的是funy的函数返回值,所以此处报错
>>>funx(7)(8)
Traceback(mostrecentcalllast):
File"
a=[1,2,3]
a="Runoob"
以上代码中,[1,2,3]是List类型,"Runoob"是String类型,而变量a是没有类型,她仅仅是一个对象的引用(一个指针),可以是List类型对象,也可以指向String类型对象。
santiago santiago 408***[email protected]年前(2018-07-03)
#0 Sonnet gra***[email protected] 参考地址16DocStrings文档字符串是一个重要工具,用于解释文档程序,帮助你的程序文档更加简单易懂。
#!/usr/bin/python
#-*-coding:UTF-8-*-
deffunction():
'''saysomethinghere!
'''
pass
print(function.__doc__)#调用doc
DocStrings文档字符串使用惯例:它的首行简述函数功能,第二行空行,第三行为函数的具体描述。
更多内容可参考:Python文档字符串(DocStrings)Sonnet Sonnet gra***[email protected] 参考地址4年前(2018-07-12)
#0 天天学python 495***[email protected]
#!/usr/bin/python
#-*-coding:UTF-8-*-
defprintme(str,int):
printstr,int
return
#int,str顺序和定义时的顺序不一样,最终输出按照print的顺序
printme(int=10,str="Mystring")
输出结果为:Mystring10
以上是一个具体实例,可以帮助更好的理解:使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。
天天学python 天天学python 495***[email protected]年前(2018-07-24)
#0 销售 axi***[email protected]#!/usr/bin/python3
defarras(x,y,z=4,*param,**params):
print(x,y,z)
foriinrange(len(param)):
print(param[i])
forjinparams:
print(j+':'+params[j])
arras(1,2,3,4,5,'Python风格规范(Google)本项目并非Google官方项目,.。
',foo='foo1=100',h00='hoo1=200',koo='koo1=4000')
输出结果:
123
4
5
Python风格规范(Google)本项目并非Google官方项目,.。
foo:foo1=100
h00:hoo1=200
koo:koo1=4000
得出:不定长参数*输出一般都是元组的结构形式,**双星输出的都是字典形式的结构,在传值的中也要确保值得准确匹配才行,不然会报错。
销售 销售 axi***[email protected]年前(2018-11-14)
#0 sunird 118***[email protected]函数的方法名也可以作为另一个函数的参数。
#!/usr/bin/python
#-*-coding:UTF-8-*-
defadd(x,y):
returnx+y
defadd_twice(func,x,y):
returnfunc(func(x,y),func(x,y))##计算过程(5+10)+(5+10)
a=5
b=10
print(add_twice(add,a,b))
其中add方法在add_twice方法中作为一个参数被调用。
sunird sunird 118***[email protected]年前(2018-11-16)
#0 yefeidd zjs***[email protected]可以通过重新创建一个列表引用对象,来避免修改函数内部列表的同时影响到外部的对象。
#!/usr/bin/python
#-*-coding:UTF-8-*-
defchangeme(mylists):
"修改传入的列表"
mylists.append([1,2,3,4])
print"函数内取值:",mylists
return
#调用changeme函数
mylist=[10,20,30]
myCopy=mylist[:]#重新创建一个索引,这样子函数内部的修改不会影响到外部的列表。
changeme(myCopy)
print"函数外取值:",mylistyefeidd yefeidd zjs***[email protected]年前(2019-08-13)
#0 hamilton 123***c.com 参考地址26关于本节可变/不可变对象传参的一点补充:
Python在heap中分配的对象分成两类:可变对象和不可变对象。
所谓可变对象是指,对象的内容是可变的,例如list。
而不可变的对象则相反,表示其内容不可变。
不可变对象:int,string,float,tuple--可理解为C中,该参数为值传递
可变对象:list,dictionary--可理解为C中,该参数为指针传递
一、不可变对象
由于Python中的变量存放的是对象引用,所以对于不可变对象而言,尽管对象本身不可变,但变量的对象引用是可变的。
运用这样的机制,有时候会让人产生糊涂,似乎可变对象变化了。
如下面的代码:
i=73
i+=2
从上面得知,不可变的对象的特征没有变,依然是不可变对象,变的只是创建了新对象,改变了变量的对象引用。
看看下面的代码,更能体现这点的。
#因为258是int对象,是不可变对象的。
所以下面3个id的值都是一样的,最后一句的结果也是为True
#有点奇怪的是为什么在IDLE,和在脚本执行的结果不太一样。
所以下面的代码请在脚本中执行。
print(id(258))
a=258
print(id(a))
b=258
print(id(b))
print(aisb)
二、对于可变对象
其对象的内容是可以变化的。
当对象的内容发生变化时,变量的对象引用是不会变化的。
如下面的例子。
m=[5,9]
m+=[6]
hamilton hamilton 123***c.com 参考地址3年前(2019-09-12)
点我分享笔记
取消
分享笔记
昵称昵称(必填)
邮箱邮箱(必填)
引用地址引用地址
分类导航
HTML/CSSHTML教程HTML5教程CSS教程CSS3教程Bootstrap3教程Bootstrap4教程Bootstrap5教程FontAwesome教程Foundation教程JavaScriptJavaScript教程HTMLDOM教程jQuery教程AngularJS教程AngularJS2教程Vue.js教程Vue3教程React教程TypeScript教程jQueryUI教程jQueryEasyUI教程Node.js教程AJAX教程JSON教程Echarts教程Highcharts教程Google地图教程服务端Python教程Python2.x教程Linux教程Docker教程Ruby教程Java教程C教程C++教程Perl教程Servlet教程JSP教程Lua教程Rust教程Scala教程Go教程PHP教程Django教程Zookeeper教程设计模式正则表达式Maven教程Verilog教程ASP教程AppML教程VBScript教程数据库SQL教程MySQL教程PostgreSQL教程SQLite教程MongoDB教程Redis教程Memcached教程数据分析Python教程NumPy教程Pandas教程Matplotlib教程Scipy教程R教程Julia教程移动端Android教程Swift教程jQueryMobile教程ionic教程Kotlin教程XML教程XML教程DTD教程XMLDOM教程XSLT教程XPath教程XQuery教程XLink教程XPointer教程XMLSchema教程XSL-FO教程SVG教程ASP.NETASP.NET教程C#教程WebPages教程Razor教程MVC教程WebForms教程WebServiceWebService教程WSDL教程SOAP教程RSS教程RDF教程开发工具Eclipse教程Git教程Svn教程Markdown教程网站建设HTTP教程网站建设指南浏览器信息网站主机教程TCP/IP教程W3C教程网站品质
Advertisement
反馈/建议
在线实例
·HTML实例
·CSS实例
·JavaScript实例
·Ajax实例
·jQuery实例
·XML实例
·Java实例
字符集&工具
·HTML字符集设置
·HTMLASCII字符集
·JS混淆/加密
·PNG/JPEG图片压缩
·HTML拾色器
·JSON格式化工具
·随机数生成器
最新更新
·
HTMLDOMstyle...
·
HTMLDOMscroll...
·
HTMLDOMscroll...
·
HTMLDOMscroll...
·
Dockerstats命令
·
JavaScripttrun...
·
JavaScripttanh...
站点信息
·
意见反馈
·
免责声明
·
关于我们
·
文章归档
关注微信
Copyright©2013-2022菜鸟教程
runoob.comAllRightsReserved.备案号:闽ICP备15012807号-1
微信关注
延伸文章資訊
- 1Python :: 定義函式
def 函式. 這時可以定義函式來封裝程式片段,將流程中引用不同數值或變數的部份設計為參數,例如 ...
- 2Python入門(二)函數基礎 - 數據分析那些事- Medium
函數(Functions)是指可重複使用的程式片段。它們允許你為某個程式碼塊賦予名字,允許你透過這一特殊的名字在你的程式任何地方來運行代碼塊 ...
- 3[Python教學]5個必知的Python Function觀念整理
今天要來教大家如何建構自己的 Python函式(Function),就是能夠讓你的程式 ... 預設值參數(Default Argument):在函式定義的參數中,將可以選擇性傳入 ...
- 4定义函数- 廖雪峰的官方网站
- 5Python 入門筆記:函式基礎,什麼是函式?什麼是回傳值return?
定義函式