1. 程式人生 > >Python之集合、函數

Python之集合、函數

報錯 定義函數 能夠 內置 lob 範圍 特性 模塊 列表

一 集合
1 集合定義:
A 如果花括號為空,則是字典類型
技術分享圖片
B 定義一個空集合,使用set 加小括號
技術分享圖片
使用B方式定義集合時,集合內部的數必須是可叠代對象,數值類型的不可以
技術分享圖片

集合的簡單應用(實現對集合內元素的去重操作,此操作可應用於對列表的去重)
1 使用集合對列表進行去重操作
技術分享圖片

2 使用字典的鍵不重復性對列表進行去重
技術分享圖片

集合的增刪改查

1 集合的增:
A add 實現對非可變類型數據的添加操作(除列表,字典)

技術分享圖片
技術分享圖片

B update 實現對可叠代對象的加入操作(數值類型則不能加入其中)

技術分享圖片

2 刪
A pop()支持對集合的無序刪除操作
技術分享圖片

B remove 支持對集合的指定元素的刪除工作,若不存在,則報錯

技術分享圖片

C discard 刪除集合中指定元素,如果不存在,則無反應

技術分享圖片

D clear 清空集合

技術分享圖片

例題應用:
要求輸入一個數,使其成為1-1000之間產生隨機數的個數的總和個數,並對這些數進行排序(有小到大)
1
[root@www ~]# cat a.py
#!/usr/bin/env python
#coding=utf-8
import random #導入該模塊,用於生成1到1000的隨機數
l1=[]
s=set()
N=input("請輸入數字總和N:")
for i in range(N): #進行循環的總數
N1=random.randint(1,1000) # 生成1-1000內的隨機數N個

s.add(N1)
l1=list(s)
l1.sort() #使用列表的內置方法進行排序
print l1

2
[root@www ~]# cat a.py
#!/usr/bin/env python
#coding=utf-8
import random
l1=[]
s=set()
N=input("請輸入數字總和N:")
for i in range(N):
N1=random.randint(1,1000)
s.add(N1)
l1=list(s)
print sorted(l1) 使用內置函數進行排序

3 查(關系測試)

1 交集 (輸出兩個集合中共有的元素)
技術分享圖片

技術分享圖片

2 並集(輸出列個集合中所有存在的元素)

技術分享圖片

技術分享圖片

3 差集(輸出第一個集合中與第二個集合不同的元素)
技術分享圖片

技術分享圖片

4 對等差分 (輸出兩個集合中各不存在但對方存在的元素)

技術分享圖片

技術分享圖片

集合關系判斷(子集,父集)
技術分享圖片

二 總結:
可變數據類型:列表,字典,集合
不可變數據類型:數值類型,元祖,字符串

可變數據類型實現某個功能,直接改變可變的數據
不可變數據類型實現某些功能,需要將結果賦值給另一個變量

可叠代數據類型(能實現for 循環):str list tuple dict set
不可叠代數據類型:數值類型

是否支持索引,切片,鏈接,重復特性
有序的數據類型:str list tuple
無序的數據類型:dict set

三 函數
1 無參數的函數
函數的定義:
def 函數名():
函數體

函數的調用:
函數名()

定義函數時,函數不執行,調用函數時,函數才執行

2 有參數的函數
A 形參
在def 函數定義時使用的參數稱為形式參數,不具備實際的意義,
def a1(x,y):
....: print x+y

 此時的x,y被稱為形式參數

 B  實參
 在調用函數時傳入函數體內部的參數稱為實參,有實際的效果的參數

 In [35]: a1(1,2)

3

In [36]: a=1;b=3

In [37]: a1(a,b)
4

此時的1,2 和 a,b 都是實參

形參的分類

A 必須參數
def a1(x,y):
....: print x+y

B 默認參數

In [59]: def a4(x,y=1): #y=1 用於當只傳入一個參數時,此y=1則會發生作用,若傳入兩個參數,則失效
....: print x,y
....:

In [60]: a4(1)
1 1

In [61]: a4(1,2)
1 2

C 可變參數

In [38]: def a2(*x): 可以同時傳輸多個參數,其產生的結果是一個元祖
....: print x
....:

In [39]: a2(1,2,3,4,5,6)
(1, 2, 3, 4, 5, 6)

a2([1,2,3,4,5])
([1, 2, 3, 4, 5],)

應用,用於數之和
In [41]: def a2(*x):
....: sum=0
....: for i in x:
....: sum+=i
....: print sum
....:

In [42]: a2(1,2,3,4,5,6,7,8,9)
45

D 關鍵字參數:

In [57]: def a3(**x):
....: print x #其返回值是一個字典
....:

In [58]: a3(a=1,b=2,c=3)
{‘a‘: 1, ‘c‘: 3, ‘b‘: 2}

函數定義時,若有多種類型的參數需要定義,則必須要遵循:必須參數--默認參數--可變參數--關鍵字參數

返回值
函數中沒有return時,默認返回None
技術分享圖片

返回多個值

#!/usr/bin/env python
#coding=utf-8
def a1(*args):
‘‘‘
返回最大值和最小值
:param args: 要求輸入多個數作比較
:return: 返回最大值和最小值
‘‘‘
return max(args) ,min(args)
print a1(1,2,3,4,10,20,100)

函數的變量作用域
global 關鍵字必須要先聲明,再使用

#!/usr/bin/env python
#coding=utf-8

x=1
def a1(x):
x=2
print x

print x 其結果是x=1
a1(x) 其結果是x=2 ,因為在調用函數內部時,此x=2是局部變量,其優先級高於X=1

#!/usr/bin/env python
#coding=utf-8

x=1
def a1():
global x #聲明變量為全局變量,並賦值
x=2
print x

a1() 結果為2
print x 結果為2
名稱空間:一個變量所能夠生效的作用域
本地作用域:只能在函數內部使用
模塊定義:全局作用域
函數定義:本地作用域
變量名解析:LEGB 原則:
變量名引用分三個作用域進行: 首先是本地。之後是函數內,接著是全局,最後是內置
Python 創建、改變或查找變量名都是在名稱空間中進行
在代碼中變量名被賦值的位置決定了其能被訪問到的返回
函數定義了本地作用域,而模塊定義了全局作用域
每個模塊都是一個全局作用域,因此,全局作用域的範圍僅限於單個程序文件
每次對函數的調用都會創建一個人新的本地作用域,賦值的變量除非聲明為全局變量,否則均為本地變量
所有的變量都可以歸納為本地、全局或內置的(由_builtin_模塊所提供的)

Python之集合、函數