【常見的內(nèi)置函數(shù)】

創(chuàng)新互聯(lián)是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開發(fā),軟件開發(fā),成都小程序開發(fā),10余年建站對(duì)汽車玻璃修復(fù)等多個(gè)領(lǐng)域,擁有豐富設(shè)計(jì)經(jīng)驗(yàn)。
1、enumerate(iterable,start=0)
是python的內(nèi)置函數(shù),是枚舉、列舉的意思,對(duì)于一個(gè)可迭代的(iterable)/可遍歷的對(duì)象(如列表、字符串),enumerate將其組成一個(gè)索引序列,利用它可以同時(shí)獲得索引和值。
2、zip(*iterables,strict=False)
用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表。如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長(zhǎng)度與最短的對(duì)象相同,利用*號(hào)操作符,可以將元組解壓為列表。
3、filter(function,iterable)
filter是將一個(gè)序列進(jìn)行過濾,返回迭代器的對(duì)象,去除不滿足條件的序列。
4、isinstance(object,classinfo)
是用來判斷某一個(gè)變量或者是對(duì)象是不是屬于某種類型的一個(gè)函數(shù),如果參數(shù)object是classinfo的實(shí)例,或者object是classinfo類的子類的一個(gè)實(shí)例,
返回True。如果object不是一個(gè)給定類型的的對(duì)象, 則返回結(jié)果總是False
5、eval(expression[,globals[,locals]])
用來將字符串str當(dāng)成有效的表達(dá)式來求值并返回計(jì)算結(jié)果,表達(dá)式解析參數(shù)expression并作為Python表達(dá)式進(jìn)行求值(從技術(shù)上說是一個(gè)條件列表),采用globals和locals字典作為全局和局部命名空間。
【常用的句式】
1、format字符串格式化
format把字符串當(dāng)成一個(gè)模板,通過傳入的參數(shù)進(jìn)行格式化,非常實(shí)用且強(qiáng)大。
2、連接字符串
常使用+連接兩個(gè)字符串。
3、if...else條件語句
Python條件語句是通過一條或多條語句的執(zhí)行結(jié)果(True或者False)來決定執(zhí)行的代碼塊。其中if...else語句用來執(zhí)行需要判斷的情形。
4、for...in、while循環(huán)語句
循環(huán)語句就是遍歷一個(gè)序列,循環(huán)去執(zhí)行某個(gè)操作,Python中的循環(huán)語句有for和while。
5、import導(dǎo)入其他腳本的功能
有時(shí)需要使用另一個(gè)python文件中的腳本,這其實(shí)很簡(jiǎn)單,就像使用import關(guān)鍵字導(dǎo)入任何模塊一樣。
在C語言中,字符串處理是每天都要面對(duì)的問題。我們都知道C語言中其實(shí)并沒有一種原生的字符串類型,‘字符串’在C語言里只是一種特殊的以''結(jié)尾的字符數(shù)組。因此,如何將C語言與更高層次的Python語言在‘字符串’處理這個(gè)問題上對(duì)接是一個(gè)有難度的問題。所幸有swig這種強(qiáng)大的工具。
如何封裝一個(gè)函數(shù),它修改參數(shù)字符串的內(nèi)容
假如有這樣一個(gè)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;
}
這個(gè)函數(shù)的功能是把字符串變成n個(gè)0。不過我們更關(guān)注函數(shù)的形式。這樣的函數(shù),表面上看char* pc是函數(shù)的參數(shù),可是實(shí)際上它才是函數(shù)的返回值和執(zhí)行的結(jié)果。piLen這個(gè)參數(shù)既是pc的最大長(zhǎng)度,也是新的字符串的長(zhǎng)度。我們直接用python封裝,看看運(yùn)行結(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é)果差強(qiáng)人意,不是我們想要得到的結(jié)果。函數(shù)的第二個(gè)參數(shù)為size_t* 我們很難用python來表示,而且python中也不存在既是輸入,也是輸出的參數(shù)。
swig有一個(gè)標(biāo)準(zhǔn)庫(kù),其中有一個(gè)cstring.i文件就是用來解決C語言字符串類型的問題。
我們?cè)?i文件中加入這樣幾行
!-- lang: cpp --
%include "cstring.i"
%cstring_output_withsize(char* pc,size_t* pi)
void FillZero(char* pc, size_t* pi);
然后運(yùn)行看結(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變成了只有一個(gè)參數(shù)的函數(shù)。然后函數(shù)的返回值變成了一個(gè)字符串。其實(shí)cstring_output_size其實(shí)是一個(gè)宏,通過這個(gè)宏的定義改變了函數(shù)的形式,直接在Python中得到我們想要的結(jié)果。
其實(shí)類似cstring_output_size的宏還有好幾個(gè),我列舉一下:
cstring_output_allocate(char *s,free($1));
第一個(gè)參數(shù)是指向字符串地址的指針,第二個(gè)參數(shù)為釋放空間的方法。
大家考慮這一下這樣的函數(shù):
void foo(char* s)
{
s = (char*)malloc(10);
memcpy(s,"123456789",9);
}
s這個(gè)參數(shù)表面上看是輸入,實(shí)際上是函數(shù)真正的輸出。 函數(shù)中真正改變的東西是chars指向的字符串的值。而且char這個(gè)類型,
python或者其他腳本語言里應(yīng)該都沒有對(duì)應(yīng)的類型。那么我們用cstring_output_allocate將這個(gè)函數(shù)轉(zhuǎn)換成另外一個(gè)形式的python或者其他腳本語言的函數(shù)。轉(zhuǎn)換后的函數(shù)其實(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);
第一個(gè)參數(shù)也是可以改變的字符串首地址,第二個(gè)參數(shù)為字符串的最大長(zhǎng)度。在Python中調(diào)用的時(shí)候,只有maxpath這個(gè)參數(shù),返回字符串。
cstring_output_allocate(char *s, free($1));
第一個(gè)參數(shù)為指向字符串首地址的指針,第二個(gè)參數(shù)為釋放指針的方法。這個(gè)宏主要是封裝一種直接在函數(shù)內(nèi)部malloc空間的函數(shù)。在Python中調(diào)用時(shí)沒有參數(shù),直接返回字符串。
cstring_output_allocate_size(char *s, int slen, free(*$1));
這個(gè)相當(dāng)于前面兩個(gè)函數(shù)的組合。在函數(shù)內(nèi)部malloc空間,然后將字符串長(zhǎng)度通過slen返回。其實(shí)在調(diào)用的時(shí)候非常簡(jiǎn)單,沒有參數(shù),直接返回字符串。
如何處理c++的std::string
std::string是C++標(biāo)準(zhǔn)類庫(kù)STL中常見的類。在平時(shí)工作中大家肯定是沒少用。在python中如何封裝std::string? swig提供了標(biāo)準(zhǔn)庫(kù)
例如函數(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);
運(yùn)行結(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' 這個(gè)宏再封裝一次了。
python是單線程的,所以做圖形界面都很挫,直接用xlwings吧,打開的excel就是界面,可以excel函數(shù)調(diào)用py,也可以py調(diào)用宏
xlwings是Python處理Excel的有力工具,xlwings的強(qiáng)大之處是可以調(diào)用vba里面的宏和各種函數(shù)。由于考慮到數(shù)據(jù)的安全性問題,宏在大部分的Excel文件當(dāng)中是不可以被執(zhí)行的。儲(chǔ)備能夠執(zhí)行的宏的Excel一般是xlmt。Python跨工作簿調(diào)用宏是需要做一系列處理,需求傳遞工作表信息到宏才能執(zhí)行。傳遞完成了,基本上vba里面宏錄制的各種操作都可以批量執(zhí)行。
1. print()函數(shù):打印字符串
2. raw_input()函數(shù):從用戶鍵盤捕獲字符
3. len()函數(shù):計(jì)算字符長(zhǎng)度
4. format(12.3654,'6.2f'/'0.3%')函數(shù):實(shí)現(xiàn)格式化輸出
5. type()函數(shù):查詢對(duì)象的類型
6. int()函數(shù)、float()函數(shù)、str()函數(shù)等:類型的轉(zhuǎn)化函數(shù)
7. id()函數(shù):獲取對(duì)象的內(nèi)存地址
8. help()函數(shù):Python的幫助函數(shù)
9. s.islower()函數(shù):判斷字符小寫
10. s.sppace()函數(shù):判斷是否為空格
11. str.replace()函數(shù):替換字符
12. import()函數(shù):引進(jìn)庫(kù)
13. math.sin()函數(shù):sin()函數(shù)
14. math.pow()函數(shù):計(jì)算次方函數(shù)
15. 3**4: 3的4次方
16. pow(3,4)函數(shù):3的4次方
17. os.getcwd()函數(shù):獲取當(dāng)前工作目錄
18. listdir()函數(shù):顯示當(dāng)前目錄下的文件
19. socket.gethostbyname()函數(shù):獲得某主機(jī)的IP地址
20. urllib.urlopen(url).read():打開網(wǎng)絡(luò)內(nèi)容并存儲(chǔ)
21. open().write()函數(shù):寫入文件
22. webbrowser.open_new_tab()函數(shù):新建標(biāo)簽并使用瀏覽器打開指定的網(wǎng)頁
23. def function_name(parameters):自定義函數(shù)
24. time.sleep()函數(shù):停止一段時(shí)間
25. random.randint()函數(shù):產(chǎn)生隨機(jī)數(shù)
通過關(guān)鍵字def來創(chuàng)建函數(shù),def的作用是實(shí)現(xiàn)python中函數(shù)的創(chuàng)建
函數(shù)定義過程:
函數(shù)名+()小括號(hào)執(zhí)行函數(shù)
函數(shù)體內(nèi)對(duì)全局變量只能讀取,不能修改
局部變量,無法在函數(shù)體外使用
python 使用 lambda 來創(chuàng)建匿名函數(shù)。
所謂匿名,意即不再使用 def 語句這樣標(biāo)準(zhǔn)的形式定義一個(gè)函數(shù)。
當(dāng)前文章:python宏與函數(shù),C語言 宏函數(shù)
文章網(wǎng)址:http://chinadenli.net/article42/dsgoeec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、電子商務(wù)、全網(wǎng)營(yíng)銷推廣、Google、服務(wù)器托管、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)