python的集合與函數
函數能提高應用的模塊性,和代碼的重復利用率。Python提供了許多內建函數,比如print()。但你也可以自己創建函數,這被叫做用戶自定義函數。
定義一個函數:
定義一個由自己想要功能的函數,以下是簡單的規則:
函數代碼塊以def關鍵詞開頭,後接函數標識符名稱和圓括號()
任何傳入參數和自變量必須放在圓括號裏。圓括號之間可以用於定義參數。
函數內容以冒號起始,並且縮進。
return[表達式]結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。
eg: def dealnum (x,y):
if x>= y:
s = x*y
return s
函數的調用:
函數名()
函數定義時候不執行,函數必須在調用的時候傳遞參數才能夠執行。
函數的參數問題
1)必選參數: 形式參數:
eg:
def add(x,y): ------函數定義
return x+y
add(1,2) -----------函數調用
默認參數:
def sum(x,y=2) ----------函數定義
return x**y
sum (3) --------直接傳遞x的值,y值默認
可變參數:函數定義的參數個數是可以發生變化的,可變參數可以理解為在剛剛開始的時候裝入 了一個空的tuple
形式參數:def add(*args): --------------定義函數
sum = 0
for i in args:
sum += i
print sum
add(1,2,3,4,5,6,7) --------------args變量名指向了一個元組
關鍵字參數:關鍵字參數和可變參數類似,都可以接收參在數數量不確定的時候使用,但是關鍵字參數可以傳入含參數名的參數,就相當於是傳入了一個dict,這是關鍵字參數和可變參數的最大不同之處。
def dealperson(name,age,**other):
print name,age,other
dealperson("james",33,"paly"=basketball,"size"=114)
函數return問題:
在定義一個函數之後必須用關鍵字return來返回一個數值
請比較一下兩個式子:
這兩個函數一個在函數體中定義了return x+y, 一個則是直接print x+y,輸出結果表示,函數如果在沒有return時,會自動返回一個None;
返回多個值:
函數的作用域:
global 定義一個全局變量,在函數體內部只能定義一個局部變量。
函數的高級特性:叠代:
eg 請找出0到20之內所有偶數的平方:
集合:集合和列表和元組最大的區別就是在於集合有去重的作用,所以說集合不是一個重復的數據結構,還有可以判斷兩個集合之間是否有交集,並集,差集,是否子集等作用。
集合的定義:1)s = {1,2,3,4} --------此時的是一個集合,但是s={}時候s為一個字典類型。
2)s = set () --------直接通過工廠方法來賦值。
所有的數據類型通過轉化為集合類型就可以具有無重性:
eg:li=[1,2,3,4,4,3,2]
s = set(li) -------此時的s就是一個集合,具有無重性。
eg: li={1,2,3,4,3,2}
d = {}.fromkeys(li); ----------字典的去重。
集合和字典類似,是無順的,並且不能切片、索引、重復、也不支持連接等動作,但是支持叠代(for)、成員查找等動作。
集合的增、刪、改:
增加:s={1,3,4,5}
s.add(9) -------------通過add()函數直接給集合添加元素,
s1 = {"hello,world"}
s.update(s1) ---------------通過update()函數把兩個集合連接起來。
刪除:s.pop() ---------------可以理解為出棧
s.remove(1) ---------------刪除指定元素‘1’
s.discard() ----------------刪除集合s本身,如果s集合不存在將do nothing
s.clear() -----------------清空集合s中的所有元素
集合最大的作用就是去重性:
先定義集合,確保產生的數字沒有重復性,然後轉化為列表,通過li.sort()函數按照從下到打的順序排列好。
python的集合與函數