Python函式中函式定義 呼叫 傳參 變數

2021-08-21 14:04:29 字數 2729 閱讀 7842

1、定義函式的規則

2、定義函式語法

語法:

def functionname( parameters ) :

"函式文件字串(即函式說明)"

function_suite(函式體)

return [expression]

預設情況下,引數值和引數名稱是按函式宣告中定義的順序匹配起來的。

3、函式呼叫

函式被定義後,本身是不會自動執行的,只有在被呼叫後,才會被執行。 

下面通過乙個例子來講解函式的呼叫。

def printstr(str1) :

"列印任何傳入的字串"

print str1

呼叫上面的列印字串函式 

原函式在定義時,定義了乙個形參str1,所以在呼叫函式時,也必須傳入乙個引數,否則會報錯。

printstr("呼叫字串列印函式")

1執行結果:

呼叫字串列印函式

4、傳參

先來看兩個例子。 

例項1:傳遞變數

#!/usr/bin/python

#coding=utf-8

def changenum(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 -*-

def changelist(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引數傳遞採用的都是「傳物件引用」的方式。實際上,這種方式相當於傳值和傳引用的一種綜合。如果函式收到的是乙個可變物件(比如字典或者列表)的引用,就能修改物件的原始值,相當於通過「傳引用」來傳遞物件。如果函式收到的是乙個不可變物件(比如數字、字元或者元組)的引用,就不能直接修改原始物件,相當於通過「傳值』來傳遞物件,此時如果想改變這些變數的值,可以將這些變數申明為全域性變數。

5.return語句的語法格式:

return   [表示式]

return 語句表示退出函式,選擇性地向呼叫方返回乙個表示式或者是乙個值或者由多個返回值組成的元組。不帶引數值的return語句返回none。如果函式不需要返回值,也可以不用寫return語句。

def printinfo(arg1, arg2) :

sum = arg1 + arg2

return sum

6.變數作用域

乙個程式的所有變數並不是在哪個位置都可以訪問的。訪問許可權決定於這個變數是在**賦值的。 

變數的作用域決定了在哪一部分你可以訪問哪個特定的變數名稱。變數分為區域性變數和全域性變數。

7.區域性變數 

定義在函式內部的變數就是區域性變數,只能在其被宣告的函式內部被訪問。這樣的變數只在函式執行時存在,一旦退出函式,這些區域性變數就都被銷毀。所有在函式內部宣告的變數名稱都將被加入作用域中。如下例項:

def printinfo(arg1, arg2) :

sum = arg1 + arg2

print "函式中的sum = ",sum

#函式體外也定義了乙個sum變數

printinfo(5,6)

sum = 1

print "函式外的sum = ",sum

上述程式執行結果:

函式中的sum = 11

函式外的sum = 1

def printinfo(y) :

global x

sum = x + y

print "sum = ",sum

x = 10

printinfo(5)

執行結果:

sum = 15

一旦變數被定義為全域性變數後,在程式任何地方都可以訪問,也可以修改。所以我們不建議過多的使用全域性變數(非必要不使用),因為這樣可能會導致全域性變數的不可預知性,並且全域性變數也降低了函式或模組之間的通用性,同時也降低了**的可讀性,別人有可能不知道這個呼叫的是哪的變數。

Python函式定義和函式呼叫

我們已經使用了一些python內建函式,比如print input str 等等。也使用了一些python自帶模組的一些庫函式,比如math模組的abs 函式。函式定義 函式呼叫 函式名 引數 示例 自定義乙個函式,要求傳入乙個任意數值,返回傳入引數的絕對值。defmy abs invalue if...

python 中呼叫c 定義的函式

上網搜了一下,發現在python 中呼叫c 中函式,網上大部分方法都是將c 編成.dll windows下 或者.so linux下 這樣和我們現在的需求不一致,c 寫的程式是要一直執行,當python指令碼中的httpserver接收到特定的請求再呼叫c 的函式。現在我們就不將c 定義的函式編成....

python中函式的定義及呼叫

1 函式的概念 函式是將具有獨立功能的 塊組織為乙個整體,使其具有特殊功能的 集 2 函式的作用 使用函式可以加強 的復用性,提高程式編寫的效率 3 函式的使用 函式必須先建立才可以使用,該過程稱為函式的定義,函式建立後可以使用,使用過程稱為函式呼叫 def 函式名 形參1,形參2 定義 函式體 函...