文章出處

Python第七天   函數  函數參數   函數變量   函數返回值  多類型傳值    冗余參數   函數遞歸調用   匿名函數   內置函數   列表表達式/列表重寫

 

目錄

Pycharm使用技巧(轉載)

Python第一天 安裝 shell 文件

Python第二天 變量 運算符與表達式 input()與raw_input()區別 字符編碼

Python第三天 序列 數據類型 數值 字符串 列表 元組 字典

Python第四天 流程控制 ifelse條件判斷 forwhile循環

Python第五天 文件訪問 for循環訪問文件 while循環訪問文件 字符串的startswith函數和split函數

Python第六天 類型轉換

Python第七天 函數 函數參數 函數變量 函數返回值 多類型傳值 冗余參數 函數遞歸調用 匿名函數 內置函數 列表表達式/列表重寫

Python第八天 模塊 包 全局變量和內置變量__name__ Python path

Python第九天 面向對象 類定義 類的屬性 類的方法 內部類 垃圾回收機制 類的繼承

Python第十天 print >> f,和fd.write()的區別 stdout的buffer 標準輸入 標準輸出 標準錯誤 重定向

Python第十一天 異常處理 glob模塊和shlex模塊 打開外部程序和subprocess模塊 subprocess類 Pipe管道 operator模塊 sorted函數 生成器 walk模塊 hashlib模塊

Python第十二天   收集主機信息   正則表達式   正則表達式  無名分組   有名分組

Python第十三天   django 1.6   導入模板   定義數據模型   訪問數據庫   GET和POST方法    SimpleCMDB項目   urllib模塊   urllib2模塊  httplib模塊  django和web服務器整合  wsgi模塊   gunicorn模塊

Python第十四天 序列化  pickle模塊  cPickle模塊  JSON模塊  API的兩種格式

 

 

 

Python函數
函數就是完成特定功能的一個語句組,這組語句可以作為一個單位使用,并且給它取一個名字。
可以通過函數名在程序的不同地方多次執行(這通常叫函數調用)。


預定義函數
可以直接使用

自定義函數
用戶自己編寫



函數的定義和調用
//定義
def 函數名([參數列表]):
函數名:如果由多個單詞組成,第二個單詞的首字母應該大寫   

//調用
函數名([參數列表])
     
#!/usr/bin/python

def fun():
    sth = raw_input("Please input something: ")
    try:
        if type(int(sth)) == type(1):
            print "%s is a number" %sth
    except ValueError:
        print "%s is not number" %sth

fun()

最好這樣寫if type(int(num)) == type(1)
type返回的不是字符串,是type對象。

------------------------------------------
函數參數

形式參數和實際參數
- 在定義函數時,函數名后面括號中的變量名稱叫做“形式參數”,或者稱為“形參”
- 在調用函數時,函數名后面括號中的變量名稱叫做“實際參數”,或者稱為“實參”





in的用法
if  i  in '0123456789'
if  plus_one in  range(10)


sys.argv跟shell內置變量一樣
sys.argv[0]  相當于 $0表示腳本本身
sys.argv[1]   相當于  $1 第一個參數
sys.argv[2]   相當于  $2 第二個參數


#!/usr/bin/python
import sys
import os

def isNum(s):
    for i in s:
        if i in '0123456789':
            pass
        else:
            #print "%s is not a number" %s
            break
    else:
        print s


isNum(sys.argv[1])


----------------------------------

 

練習
打印系統的所有PID
要求從/proc讀取。
os.listdir()
os.listdir:列出目錄下的所有文件和目錄,列表形式,每個列表元素都是字符串

#!/usr/bin/python

import sys
import os

def isNum(s):
for i in s:
if i in '0123456789':
pass
else:
#print "%s is not a number" %s
break
else:
print s

for i in os.listdir('/proc'):
isNum(i)

#!/usr/bin/python

import sys
import os

def isNum(s):
if s in '0123456789':
print s


for i in os.listdir('/proc'):
isNum(i)



---------------------------------------

函數默認參數
缺省參數(默認參數)
def fun(x, y=100):
print x,y
默認參數要寫在最右邊,否則會報錯 def fun(y=100,x): 這個報錯

fun(1,2)
fun(x=1,y=2) 傳參的另一種方式,不過比較啰嗦很少用
fun(1)

-----------------------------------
函數變量
局部變量和全局變量
- Python中的任何變量都有特定的作用域
- 在函數中定義的變量一般只能在該函數內部使用,這些只能在程序的特定部分使用的變量我們稱之為局部變量
- 在一個文件頂部定義的變量可以供文件中的任何函數調用,這些可以為整個程序所使用的變量稱為全局變量

global語句
global 變量名
強制聲明為全局變量

全局變量在函數外聲明,在函數里面global引用全局變量
在函數里面global聲明全局變量,在函數外可以引用這個全局變量

#!/usr/bin/python
x = 100
def fun():
global x
x += 1
print x

fun()
print x

 


globals函數打印當前環境的所有全局變量,返回字典
locals函數打印當前環境的所有局部變量,返回字典
#!/usr/bin/python

x = 100
def fun():
x = 1
y = 1
print locals()

fun()
print locals()


---------------------------------

函數返回值
- 函數被調用后會返回一個指定的值
- 函數調用后默認返回None
- return 返回值
- 返回值可以是任意類型
- return執行后,函數終止
- return與print區別


------------------------------
多類型傳值

元組傳參
實參前面加一個* 傳入元組,元組要放在右邊
def fun(x,y,z)
return x+y+z
t1=(2,3,4)
t=(1,2)
fun(*t1)
fun(*(1,2,3))
fun(1,*t)

字典傳參
字典的key的名字要跟形參的名字一樣,x,y,z否則會報錯
dic = {'x':1,'y':3,'z':5}
fun(**dic)

 

冗余參數
向函數傳元組和字典
處理多余實參
def fun(x,y,*args,**kwargs)


fun(1,2,'a',[2,4],y=2,z=3)
fun(1,2,'a',[2,4],*t,y=2,**{'u':12})


--------------------------------
函數遞歸調用

計算階層
遞歸調用
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)

print factorial(5)


注意事項
必須有最后的默認結果: if n == 0
遞歸參數必須向默認結果收斂的: factorial(n-1)

 

打印目錄下所有文件
def print_files(path):
isdir, isfile, join = os.path.isdir, os.path.isfile, os.path.join
lsdir = os.listdir(path)
dirs = [i for i in lsdir if isdir(join(path,i))]
files = [i for i in lsdir if isfile(join(path,i))]
if dirs:
for d in dirs:
print_files(join(path,d))
if files:
for f in files:
print join(path,f)
print_files(sys.argv[1])

 

--------------------------------------

匿名函數
lambda函數是一種快速定義單行的最小函數,可以用在任何需要函數的地方。
lambda語句中,冒號前是參數,可以有多個,逗號隔開,冒號右邊是返回值。
lambda語句構建的其實是一個函數對象

def fun(x, y):
return x*y
fun(2, 3)
r = lambda x,y: x*y
r(2, 3)

def add(x, y):
return x + y
sum = reduce(add, [1, 2, 3])

reduce(lambda x,y:x+y, range(1,4))

 

匿名函數優點:
- 1.使用python寫一些腳本時,使用lambda可以省去定義函數的過程,讓代碼更加精簡。
- 2. 對于一些抽象的,不會被別的地方再重復使用的函數,有時候函數起個名字也是個難題,使用lambda不需要考慮命名的問題。
- 3. 使用lambda在某些時候讓代碼更容易理解。

 

-------------------------------------------

內置函數

所有內置函數和內置類都在__builtin__模塊(__builtin__前后雙下劃線)
查詢內置函數和類
https://docs.python.org/2/library/index.html


絕對值,最大最小值
abs()
max()
max('12345','789')
字符串'789‘比字符串’12345‘大,字符串是從左到到右開始比較的,'7’比‘1'大,所以輸出’789'
min()

len() 參數是一個對象(字符串,元組,字典)不能是整數
divmod() 參數是兩個數字,返回商和余數
pow() 乘方
round() 給出小數點的精度,沒有第二個參數直接四舍五入

常用函數
callable() 可被調用的,例如類,函數
type()
isinstance() isinstance(s,(int,tuple,str)),s是一個對象,第二個參數是元組,判斷s這個對象的數據類型在不在第二個參數元組里,是返回true ,否返回false
class A(object):
pass
a=A()
isinstance(a,A)

cmp() 如果是字符串,則逐個字符比較,一旦有字符比較出來就不往下比較
range()
xrange()

類型轉換函數
int() 參數如果是字符串,只能是純數字字符串,不能帶小數
long() 參數如果是字符串,只能是純數字字符串,不能帶小數
float() 參數如果是字符串,只能是純數字字符串,不能帶小數
complex()
str()
list()
tuple()
hex()
oct()
chr() 輸入0<x<256 返回ascii字符
ord() 輸入ascii的單個字母,返回數字
eval() 將有效表達式求值,其實就是去掉字符串

 

 

字符串處理函數
下面函數實例化一個string對象或聲明一個string變量
str.capitalize()   將字符串里的第一個字符大寫并返回
str.replace()   replace(old,new,count)
str.split()   字符串切成列表 不指定分隔符,那么以空格,tab鍵,換行符作為分隔 split('.',1) 點為分隔,切1次
str.join()     列表連接為字符串 ''.join([str(i)  for i in range(10)])  join會在被插入字符中間插入 ','.join([str(i)  for i in range(10)]) 逗號變為的分隔符
s= 'sdf'
s.join('22')
'2sdf2'

靜態函數,不需要實例化一個string對象
string模塊   import  string
string.capitalize('hello')
string.replace('wecan','a','t')
string.split('we,w,e',',')
string.join('ww','tt')



序列處理函數
len()
max()
min()
filter()   filter(none/func, seq) 如果不是none,func這個函數依次對sequence里的元素做處理,最后返回一個list, tuple, or string。

zip()   合并多個列表
l1=[1,2,3]
l2=['a','b','c']

zip(l1,l2)
[(1, 'a'), (2, 'b'), (3, 'c')]
dict(zip(l1,l2)) 從中創建字典


map()   map(none,l1,l2,l3)跟zip函數一樣,元素最少的那個序列以none補充,map(func,seq)對序列的每個元素都放進去函數里去處理,并且函數參數要與序列元素個數相同
與filter(func, seq)類似,但是filter(func, seq)只能處理單個序列

reduce()   reduce(func,seq)

使用lambda代入序列處理函數
filter(lambda x:x %2 ==0, range(10))
     [0, 2, 4, 6, 8]
map(lambda x,y:x*y, range(5),range(5))
     [0, 1, 4, 9, 16]
reduce(lambda x,y:x+y, range(1,101))
     5050





列表表達式/列表重寫
[i*2+10 for i in range(10)]

[i for i in range(10) if i%3 == 0]







 


提示

16行報錯,vim +16 xx.py

 


文章列表


不含病毒。www.avast.com
文章標籤
全站熱搜
創作者介紹
創作者 AutoPoster 的頭像
AutoPoster

互聯網 - 大數據

AutoPoster 發表在 痞客邦 留言(0) 人氣(2)