1、函數(shù)定義
鳳岡網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
①使用def關(guān)鍵字定義函數(shù)
②
def 函數(shù)名(參數(shù)1.參數(shù)2.參數(shù)3...):
"""文檔字符串,docstring,用來說明函數(shù)的作用"""
#函數(shù)體
return 表達(dá)式
注釋的作用:說明函數(shù)是做什么的,函數(shù)有什么功能。
③遇到冒號要縮進(jìn),冒號后面所有的縮進(jìn)的代碼塊構(gòu)成了函數(shù)體,描述了函數(shù)是做什么的,即函數(shù)的功能是什么。Python函數(shù)的本質(zhì)與數(shù)學(xué)中的函數(shù)的本質(zhì)是一致的。
2、函數(shù)調(diào)用
①函數(shù)必須先定義,才能調(diào)用,否則會報錯。
②無參數(shù)時函數(shù)的調(diào)用:函數(shù)名(),有參數(shù)時函數(shù)的調(diào)用:函數(shù)名(參數(shù)1.參數(shù)2.……)
③不要在定義函數(shù)的時候在函數(shù)體里面調(diào)用本身,否則會出不來,陷入循環(huán)調(diào)用。
④函數(shù)需要調(diào)用函數(shù)體才會被執(zhí)行,單純的只是定義函數(shù)是不會被執(zhí)行的。
⑤Debug工具中Step into進(jìn)入到調(diào)用的函數(shù)里,Step Into My Code進(jìn)入到調(diào)用的模塊里函數(shù)。
使用Python的ctypes,我們可以直接調(diào)用由C直接編譯出來的函數(shù)。其實(shí)就是調(diào)用動態(tài)鏈接庫中的函數(shù)。為什么我們需要這樣做呢,因?yàn)橛行r候,我們可能需要一個性能上比較講究的算法,有些時候,我們可以在Python中使用已經(jīng)有了的現(xiàn)成的被封閉在動態(tài)鏈接庫中的函數(shù)。下面是如何調(diào)用的示例。
首先,我們用一個乘法來表示一個算法功能。下面是C的程序:
int?multiply(int?num1,?int?num2){???
return?num1?*?num2;
}????
如果在Windows下,你可能需要寫成下面這個樣子:
#include?windows.h?
BOOL?APIENTRYDll
Main(HANDLE?hModule,?DWORD?dwReason,?LPVOID?lpReserved){????
return?TRUE;
}?
__declspec(dllexport)?
intmultiply(int?num1,?int?num2){?
return?num1?*?num2;
}????
然后,自然是把這個C文件編成動態(tài)鏈接庫:
Linux下的編譯:
gcc?-c?-fPIC?libtest.c
gcc?-shared?libtest.o?-o?libtest.so????
Windows下的編譯:
cl?-LD?libtest.c?-libtest.dll????
于是在我們的Python中可以這樣使用:
(其中的libtest.so在Windows下改成libtest.dll即可)
from?ctypes?import?*
import?os
libtest?=?cdll.LoadLibrary(os.getcwd()?+?'/libtest.so')
print?libtest.multiply(2,?2)4????
注意:上面的Python腳本中需要把動態(tài)鏈接庫放到當(dāng)前目錄中。
今天遇到同樣的問題,就來答一波吧
1,如果是在類中,那么就很簡單了,類中的一個函數(shù)調(diào)用另一個函數(shù),只要在那個被調(diào)用的函數(shù)前加self即可(圖如下,詳細(xì)可以參考筆者博客),
2,如果不是在類中,(這是筆者遇到的問題),有一個簡單的方法,如下sin_f函數(shù)調(diào)用sin函數(shù)(注:a=sin()不能寫到sin_f()函數(shù)下,會說a沒聲明就調(diào)用):
3,如果是已經(jīng)存在的包,那么調(diào)用包更簡單了,(同樣可以參考筆者上面給的那個博客第四部分)
4,最后,更多關(guān)于python問題可以參考筆者的python教程筆記
概要等式運(yùn)算函數(shù)中參數(shù)的定義與調(diào)用定義函數(shù)時*的作用:out定義函數(shù)時:**OUTOUT調(diào)用函數(shù)時,和*均是為了分配參數(shù)用的調(diào)用函數(shù)時:*:調(diào)用函數(shù)時:**:
概要
關(guān)于""和"*"兩個特殊符號的區(qū)別,首先在python中是沒有指針的,與C++有很大的不同。
等式運(yùn)算
python中常用的乘法運(yùn)算符*
3*7
21
l=[2 * i for i in range(100) ]
l
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102,
104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198]
函數(shù)中參數(shù)的定義與調(diào)用
如果在定義函數(shù)時,代表收集參數(shù),*代表收集關(guān)鍵字參數(shù)。
定義函數(shù)時*的作用:
def symbols(*params):
print(params)
out
symbols(1,2,3)
(1,2,3)
此時*是將調(diào)用時提供的所有值,放在一個元組里。
這種情況下,在函數(shù)定義時的形參里的*params后面,就最好不要再加入別的形參了,比如你定義成 def symbols(*params,x) ,調(diào)用的時候symbols(1,2,3),就會報錯。因?yàn)檫@樣python分不清哪個數(shù)據(jù)是給params的。如果你非要這么定義也行,不過在調(diào)用的時候,必須顯示的指出哪個值是給x的。比如symbols(1,2,x=3),通過這種方式調(diào)用才不會出錯。
定義函數(shù)時:**
對于之前參數(shù)是*params的情況,symbols并不能傳入關(guān)鍵字參數(shù)。仍然采取這種方式定義時:會報錯
def symbols1(*params):
print(params)
OUT
symbols1(x=1,y=2,z=3)
Traceback (most recent call last):
File "stdin", line 1, in module
TypeError: symbols1() got an unexpected keyword argument 'x'
報錯
因?yàn)?號并不會收集關(guān)鍵字參數(shù)。所以需要如下方式修改,采用兩個星號:
def symbols2(**params):
print(params)
這樣調(diào)用symbols2就不會有問題:
OUT
symbols2(x=1,y=2,z=3)
{'z'=3,'x'=1,'y'=2}
以上輸出得到一個字典。字典中元素的先后順序取決于你的環(huán)境。
調(diào)用函數(shù)時,和*均是為了分配參數(shù)用的
調(diào)用函數(shù)時:*:
例如,還是剛剛那個print函數(shù)
def symbols(x,y):
print(x)
print(y)
兩個形參,如果只想傳入一個形參呢
對,“調(diào)用函數(shù)時分配參數(shù)”跟“定義函數(shù)時收集參數(shù)”,反過來了!
假設(shè)你還有一個元組:
params=(1,2)
可以通過如下方式調(diào)用symbols函數(shù):
symbols(*params)
就可以輸出:
1
2
調(diào)用函數(shù)時:**:
和上面*時一樣,只是分配的是字典。
params={'x':1,'y':2}
可以通過如下方式調(diào)用symbols函數(shù):
symbols(**params)
就可以輸出:
1
2
%用來獲得除法運(yùn)算的余數(shù),比如5%2=1
divmod(x,y)這個函數(shù)也可以獲得商和余數(shù),比如divmod(5,2),返回的值為(2,1),其中2為商,1為余數(shù)
Python是支持四則運(yùn)算的,Python中的乘法運(yùn)算也很簡單,如下:
假設(shè)變量a的值是10,變量b的值是21,則
更多技術(shù)請關(guān)注Python視頻教程。