函式是組織好的,可以被重複使用的,用來實現單一或相關功能的**塊。
任何程式語言都提供了很多內嵌函式,同時還允許使用者自己定義想要的函式。本節主要講自定義函式。
1、定義函式的規則
2、定義函式語法
語法:
def
functionname
( parameters ) :
"函式文件字串(即函式說明)"
function_suite(函式體)
return [expression]
預設情況下,引數值和引數名稱是按函式宣告中定義的順序匹配起來的。
3、函式呼叫
函式被定義後,本身是不會自動執行的,只有在被呼叫後,才會被執行。
下面通過乙個例子來講解函式的呼叫。
def
printstr
(str1) :
"列印任何傳入的字串"
print str1
呼叫上面的列印字串函式
原函式在定義時,定義了乙個形參str1,所以在呼叫函式時,也必須傳入乙個引數,否則會報錯。
printstr
("呼叫字串列印函式")
執行結果:
呼叫字串列印函式
4、傳參
先來看兩個例子。
例項1:傳遞變數
#!/usr/bin/python
#coding=utf-8
defchangenum
(num) :
num += 1
print
"自定義函式中的num = ",num
#定義變數num,賦初始值為10
num = 10
#changenum(num)
print
"函式呼叫後num = ",num
執行結果:
自定義函式中的num = 11
函式呼叫後num = 10
例項2 :傳序列list
#!/usr/bin/python
# -*- coding: utf-8 -*-
defchangelist
(list1) :
print
"函式中的list :",list1
#定義變數num,賦初始值為10
list1 = [1,2,3]
print
"呼叫函式前的list: ",list1
changelist(list1)
print
"呼叫函式後的list:",list1
執行結果:
呼叫函式前的list: [1, 2, 3]
函式中的list : [1, 2, 3, 'newstr']
呼叫函式後的list: [1, 2, 3, 'newstr']
從上面的結果可以看出,在函式中改變num變數的值,但是在函式呼叫之外num變數的值卻沒有改變。而在第二個例項中,在函式中像list1中增加乙個元素』newstr』,在函式外檢視原list1,發現也增加了乙個元素』newstr』。也就是說在函式中改變list1,原list1也跟著改變。但是從這樣我們就能說在python中,例項1是傳值,例項2是傳引用嗎?
其實非也,和其他語言不一樣,在python中,一切皆物件, python引數傳遞採用的都是「傳物件引用」的方式。實際上,這種方式相當於傳值和傳引用的一種綜合。如果函式收到的是乙個可變物件(比如字典或者列表)的引用,就能修改物件的原始值,相當於通過「傳引用」來傳遞物件。如果函式收到的是乙個不可變物件(比如數字、字元或者元組)的引用,就不能直接修改原始物件,相當於通過「傳值』來傳遞物件,此時如果想改變這些變數的值,可以將這些變數申明為全域性變數。
Python函式定義和函式呼叫
我們已經使用了一些python內建函式,比如print input str 等等。也使用了一些python自帶模組的一些庫函式,比如math模組的abs 函式。函式定義 函式呼叫 函式名 引數 示例 自定義乙個函式,要求傳入乙個任意數值,返回傳入引數的絕對值。defmy abs invalue if...
python基礎 函式定義 呼叫
在python中,定義乙個函式要使用def語句,依次寫出函式名 括號 括號中的引數和冒號 然後,在縮排塊中編寫函式體,函式的返回值用return語句返回。我們以自定義乙個求絕對值的my abs函式為例 定義函式 def my abs x if x 0 return x else return x 函...
python函式定義和呼叫
python是不需要先編譯的,所以這決定了你呼叫函式之前得知道有這個函式,所以執行 前需要有要用到的函式的定義。下面的 在執行的時候,程式看到了函式fun1 fun2 並把相關的資訊記錄下來知道有這麼個函式,但是並沒有去檢視函式內部的東西。等到呼叫函式fun1 時,再檢視函式內部的實現,發現使用了函...