python用類封裝函數(shù),python類的封裝

python如何封裝函數(shù)

可以定義一個類,類里定義很多函數(shù)(主要用它做什么)或直接定義函數(shù)在一個py文件中

阿勒泰網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

在另一個文件中導(dǎo)入這個那個py包,調(diào)用類和方法

就是封裝了

如何用Python封裝C語言的字符串處理函數(shù)

在C語言中,字符串處理是每天都要面對的問題。我們都知道C語言中其實并沒有一種原生的字符串類型,‘字符串’在C語言里只是一種特殊的以''結(jié)尾的字符數(shù)組。因此,如何將C語言與更高層次的Python語言在‘字符串’處理這個問題上對接是一個有難度的問題。所幸有swig這種強大的工具。

如何封裝一個函數(shù),它修改參數(shù)字符串的內(nèi)容

假如有這樣一個C語言的函數(shù),

!-- lang: cpp --

void FillZero(char* pc,size_t * piLen)

{

size_t i=0;

while(i++*piLen/2 )

*pc++ = '0';

*pc = 0;

*piLen = i+1;

}

這個函數(shù)的功能是把字符串變成n個0。不過我們更關(guān)注函數(shù)的形式。這樣的函數(shù),表面上看char* pc是函數(shù)的參數(shù),可是實際上它才是函數(shù)的返回值和執(zhí)行的結(jié)果。piLen這個參數(shù)既是pc的最大長度,也是新的字符串的長度。我們直接用python封裝,看看運行結(jié)果。

Type "help", "copyright", "credits" or "license" for more information.

import cchar

s='123456'

cchar.FillZero(s,6)

Traceback (most recent call last):

File "stdin", line 1, in module

TypeError: in method 'FillZero', argument 2 of type 'size_t *'

結(jié)果差強人意,不是我們想要得到的結(jié)果。函數(shù)的第二個參數(shù)為size_t* 我們很難用python來表示,而且python中也不存在既是輸入,也是輸出的參數(shù)。

swig有一個標(biāo)準(zhǔn)庫,其中有一個cstring.i文件就是用來解決C語言字符串類型的問題。

我們在.i文件中加入這樣幾行

!-- lang: cpp --

%include "cstring.i"

%cstring_output_withsize(char* pc,size_t* pi)

void FillZero(char* pc, size_t* pi);

然后運行看結(jié)果

Type "help", "copyright", "credits" or "license" for more information.

import cchar

cchar.FillZero(10)

'00000\x00'

s=cchar.FillZero(10)

print s

00000

我們看函數(shù)的變化。首先在python里, FillZero變成了只有一個參數(shù)的函數(shù)。然后函數(shù)的返回值變成了一個字符串。其實cstring_output_size其實是一個宏,通過這個宏的定義改變了函數(shù)的形式,直接在Python中得到我們想要的結(jié)果。

其實類似cstring_output_size的宏還有好幾個,我列舉一下:

cstring_output_allocate(char *s,free($1));

第一個參數(shù)是指向字符串地址的指針,第二個參數(shù)為釋放空間的方法。

大家考慮這一下這樣的函數(shù):

void foo(char* s)

{

s = (char*)malloc(10);

memcpy(s,"123456789",9);

}

s這個參數(shù)表面上看是輸入,實際上是函數(shù)真正的輸出。 函數(shù)中真正改變的東西是chars指向的字符串的值。而且char這個類型,

python或者其他腳本語言里應(yīng)該都沒有對應(yīng)的類型。那么我們用cstring_output_allocate將這個函數(shù)轉(zhuǎn)換成另外一個形式的python或者其他腳本語言的函數(shù)。轉(zhuǎn)換后的函數(shù)其實是這樣的,以python為例str

foo()。

!-- lang: cpp --

%module a

%include "cstring.i"

%{

void foo(char* s);

%}

%cstring_output_allocate(char *s, free(*$1));

void foo(char *s);

在python中的調(diào)用:

!-- lang: python --

import a

a.foo()

'123456789'

cstring_output_maxsize(char *path, int maxpath);

第一個參數(shù)也是可以改變的字符串首地址,第二個參數(shù)為字符串的最大長度。在Python中調(diào)用的時候,只有maxpath這個參數(shù),返回字符串。

cstring_output_allocate(char *s, free($1));

第一個參數(shù)為指向字符串首地址的指針,第二個參數(shù)為釋放指針的方法。這個宏主要是封裝一種直接在函數(shù)內(nèi)部malloc空間的函數(shù)。在Python中調(diào)用時沒有參數(shù),直接返回字符串。

cstring_output_allocate_size(char *s, int slen, free(*$1));

這個相當(dāng)于前面兩個函數(shù)的組合。在函數(shù)內(nèi)部malloc空間,然后將字符串長度通過slen返回。其實在調(diào)用的時候非常簡單,沒有參數(shù),直接返回字符串。

如何處理c++的std::string

std::string是C++標(biāo)準(zhǔn)類庫STL中常見的類。在平時工作中大家肯定是沒少用。在python中如何封裝std::string? swig提供了標(biāo)準(zhǔn)庫

例如函數(shù):

!-- lang: cpp --

string Repeat(const string s)

{

return s+s;

}

只要在swig中加入這樣幾行:

!-- lang: cpp --

%include "std_string.i"

using namespace std;

string Repeat(const string s);

運行結(jié)果:

Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)

[GCC 4.4.5] on linux2

Type "help", "copyright", "credits" or "license" for more information.

import cchar

cchar.Repeat('123')

'123123'

使用起來很方便,但需要注意的是,假如函數(shù)的參數(shù)的內(nèi)容是可以被修改,就不能用這種方式封裝。

例如:

!-- lang: cpp --

void repeat(string s)

{

s+=s;

}

這樣的函數(shù)直接使用 'std_string.i' 就是無效的。遇到這種函數(shù),只能用C語言封裝成 void repeat(chars, int maxsize), 再用swig調(diào)用 'cstring_output_withsize' 這個宏再封裝一次了。

python類和函數(shù)的區(qū)別

一、主體不同

1、類:是面向?qū)ο蟪绦蛟O(shè)計實現(xiàn)信息封裝的基礎(chǔ)。

2、函數(shù):是指一段在一起的、可以做某一件事兒的程序。也叫做子程序、(OOP中)方法。

二、特點不同

1、類:是一種用戶定義的引用數(shù)據(jù)類型,也稱類類型。每個類包含數(shù)據(jù)說明和一組操作數(shù)據(jù)或傳遞消息的函數(shù)。類的實例稱為對象。

2、函數(shù):分為全局函數(shù)、全局靜態(tài)函數(shù);在類中還可以定義構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、成員函數(shù)、友元函數(shù)、運算符重載函數(shù)、內(nèi)聯(lián)函數(shù)等。

三、規(guī)則不同

1、類:實質(zhì)是一種引用數(shù)據(jù)類型,類似于byte、short、int(char)、long、float、double等基本數(shù)據(jù)類型,不同的是它是一種復(fù)雜的數(shù)據(jù)類型。

2、函數(shù):函數(shù)必須聲明后才可以被調(diào)用。調(diào)用格式為:函數(shù)名(實參)調(diào)用時函數(shù)名后的小括號中的實參必須和聲明函數(shù)時的函數(shù)括號中的形參個數(shù)相同。

參考資料來源:百度百科-函數(shù)

參考資料來源:百度百科-類

python中將函數(shù)和變量封裝成類的好處

封裝成類的好處,總結(jié)歸納有2個:一個是保護隱私,一個是降低程序復(fù)雜度

Python函數(shù)的定義(構(gòu)造)和調(diào)用

這里來給大家演示一下,函數(shù)的定義或構(gòu)造,并調(diào)用函數(shù)來實現(xiàn)封裝后的效果。

首先我們來看看想實現(xiàn)下面的這個效果,如果不使用函數(shù)應(yīng)該怎么實現(xiàn)。

以上兩種返回結(jié)果都是1-9這幾個數(shù)字。

以上兩種方法,第一種代碼重復(fù)率太高,代碼美觀效果太差,雖然能實現(xiàn)效果,但是因為數(shù)量比較少,還能手工打出來這幾行代碼,如果是打印1-100000就很難實現(xiàn)了。這時候for循環(huán)還是可以實現(xiàn)的,但是for循環(huán)只能實現(xiàn)類似的數(shù)字和變量循環(huán),無法進行復(fù)雜的功能開發(fā)。鑒于此,函數(shù)這個概念就被python引入了,下面先來看看函數(shù)是怎么實現(xiàn)上面的效果的,還是兩種方法。

這時候如果想實現(xiàn)上面的打印結(jié)果就直接使用函數(shù)名+小括號調(diào)用函數(shù)就可以了,這種類型的語法,不僅可以反復(fù)使用,而且封裝后的代碼更美觀。

Python如何把一段代碼封裝起來重復(fù)使用

你可以用類或者函數(shù)將其封裝一下,將需要后期變動的變量作為參數(shù)放在其中,可以使用默認值傳參。

舉個簡單函數(shù)和類的栗子:

#?函數(shù)封裝

def?sum(a,?b=3):

return?a?+?b

#?類封裝

class?S(object):

def?__init__(self,?a=2,?b=3)

self.a?=?a

self.b?=?b

def?sum(self):

return?self.a?+?self.b

網(wǎng)頁標(biāo)題:python用類封裝函數(shù),python類的封裝
分享地址:http://muchs.cn/article22/hcicjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、面包屑導(dǎo)航域名注冊、網(wǎng)站營銷、商城網(wǎng)站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)