x=3.14
創(chuàng)新互聯(lián)專業(yè)成都網站建設、成都做網站,集網站策劃、網站設計、網站制作于一體,網站seo、網站優(yōu)化、網站營銷、軟文發(fā)稿等專業(yè)人才根據搜索規(guī)律編程設計,讓網站在運行后,在搜索中有好的表現(xiàn),專業(yè)設計制作為您帶來效益的網站!讓網站建設為您創(chuàng)造效益。
y=3.14
print(x is y)
#is 在python里表示的是 判斷左右兩端是否指向同一個對象
#in 在python里表示的是? 檢查某個數據是否存在于某包含多個成員的數據類型(如 字符串 列表 元組 字典中)? 如果是成員關系 則返回真? 否則返回假
alst = [1,2,3]
atpl = ['a','b','c']
print(1 in alst)
print(1 in atpl)
print('a' not in atpl)
print('a' not in alst)
print('ab' in 'abcde')
print('ad' in 'abcde')
adct = {'a':1,'b':2}
print('a' in adct)
print('1' in adct)#字典只能檢查鍵值 不能檢查值
#序列切片
alst=[0,1,2,3,4,5,6,7]
print(alst[3]) ?#3
print(alst[-5]) ?#3
print(alst[0:]) ?#[0, 1, 2, 3, 4, 5, 6, 7]
print(alst[0:3]) ? ?#?[0, 1, 2]
print(alst[0:3:2]) ? #[0, 2]
print(alst[0:-1:2]) ?#?[0, 2, 4, 6]
print(alst[7:0:-2])#從右向左取?[7, 5, 3, 1]
1. 不同類型的參數簡述
#這里先說明python函數調用得語法為:
復制代碼
代碼如下:
func(positional_args,
keyword_args,
*tuple_grp_nonkw_args,
**dict_grp_kw_args)
#為了方便說明,之后用以下函數進行舉例
def test(a,b,c,d,e):
print a,b,c,d,e
舉個例子來說明這4種調用方式得區(qū)別:
復制代碼
代碼如下:
#
#positional_args方式
test(1,2,3,4,5)
1 2 3 4 5
#這種調用方式的函數處理等價于
a,b,c,d,e = 1,2,3,4,5
print a,b,c,d,e
#
#keyword_args方式
test(a=1,b=3,c=4,d=2,e=1)
1 3 4 2 1
#這種處理方式得函數處理等價于
a=1
b=3
c=4
d=2
e=1
print a,b,c,d,e
#
#*tuple_grp_nonkw_args方式
x = 1,2,3,4,5
test(*x)
1 2 3 4
5
#這種方式函數處理等價于
復制代碼
代碼如下:
a,b,c,d,e = x
a,b,c,d,e
#特別說明:x也可以為dict類型,x為dick類型時將鍵傳遞給函數
y
{'a': 1,
'c': 6, 'b': 2, 'e': 1, 'd': 1}
test(*y)
a c b e d
#
#**dict_grp_kw_args方式
y
{'a': 1, 'c': 6, 'b': 2, 'e': 1, 'd': 1}
test(**y)
1 2 6
1 1
#這種函數處理方式等價于
a = y['a']
b = y['b']
... #c,d,e不再贅述
a,b,c,d,e
2.
不同類型參數混用需要注意的一些細節(jié)
接下來說明不同參數類型混用的情況,要理解不同參數混用得語法需要理解以下幾方面內容.
首先要明白,函數調用使用參數類型必須嚴格按照順序,不能隨意調換順序,否則會報錯. 如 (a=1,2,3,4,5)會引發(fā)錯誤,;
(*x,2,3)也會被當成非法.
其次,函數對不同方式處理的順序也是按照上述的類型順序.因為#keyword_args方式和**dict_grp_kw_args方式對參數一一指定,所以無所謂順序.所以只需要考慮順序賦值(positional_args)和列表賦值(*tuple_grp_nonkw_args)的順序.因此,可以簡單理解為只有#positional_args方式,#*tuple_grp_nonkw_args方式有邏輯先后順序的.
最后,參數是不允許多次賦值的.
舉個例子說明,順序賦值(positional_args)和列表賦值(*tuple_grp_nonkw_args)的邏輯先后關系:
復制代碼
代碼如下:
#只有在順序賦值,列表賦值在結果上存在羅輯先后關系
#正確的例子1
x =
{3,4,5}
test(1,2,*x)
1 2 3 4 5
#正確的例子2
test(1,e=2,*x)
1 3 4 5 2
#錯誤的例子
test(1,b=2,*x)
Traceback (most recent call
last):
File "stdin", line 1, in module
TypeError: test()
got multiple values for keyword argument 'b'
#正確的例子1,處理等價于
a,b = 1,2 #順序參數
c,d,e = x #列表參數
print a,b,c,d,e
#正確的例子2,處理等價于
a = 1 #順序參數
e = 2 #關鍵字參數
b,c,d = x #列表參數
#錯誤的例子,處理等價于
a = 1 #順序參數
b = 2 #關鍵字參數
b,c,d = x
#列表參數
#這里由于b多次賦值導致異常,可見只有順序參數和列表參數存在羅輯先后關系
函數聲明區(qū)別
理解了函數調用中不同類型參數得區(qū)別之后,再來理解函數聲明中不同參數得區(qū)別就簡單很多了.
1. 函數聲明中的參數類型說明
函數聲明只有3種類型, arg, *arg , **arg 他們得作用和函數調用剛好相反.
調用時*tuple_grp_nonkw_args將列表轉換為順序參數,而聲明中的*arg的作用是將順序賦值(positional_args)轉換為列表.
調用時**dict_grp_kw_args將字典轉換為關鍵字參數,而聲明中**arg則反過來將關鍵字參數(keyword_args)轉換為字典.
特別提醒:*arg
和 **arg可以為空值.
以下舉例說明上述規(guī)則:
復制代碼
代碼如下:
#arg, *arg和**arg作用舉例
def
test2(a,*b,**c):
print a,b,c
#
#*arg 和
**arg可以不傳遞參數
test2(1)
1 () {}
#arg必須傳遞參數
test2()
Traceback (most recent call last):
File "stdin", line 1,
in module
TypeError: test2() takes at least 1 argument (0 given)
#
#*arg將順positional_args轉換為列表
test2(1,2,[1,2],{'a':1,'b':2})
1 (2, [1, 2], {'a': 1, 'b': 2})
{}
#該處理等價于
a = 1 #arg參數處理
b = 2,[1,2],{'a':1,'b':2} #*arg參數處理
c =
dict() #**arg參數處理
print a,b,c
#
#**arg將keyword_args轉換為字典
test2(1,2,3,d={1:2,3:4}, c=12, b=1)
1 (2, 3) {'c': 12, 'b': 1, 'd': {1: 2, 3:
4}}
#該處理等價于
a = 1 #arg參數處理
b= 2,3 #*arg參數處理
#**arg參數處理
c =
dict()
c['d'] = {1:2, 3:4}
c['c'] = 12
c['b'] = 1
a,b,c
2. 處理順序問題
函數總是先處理arg類型參數,再處理*arg和**arg類型的參數.
因為*arg和**arg針對的調用參數類型不同,所以不需要考慮他們得順序.
復制代碼
代碼如下:
def test2(a,*b,**c):
a,b,c
test2(1, b=[1,2,3], c={1:2, 3:4},a=1)
Traceback (most
recent call last):
File "stdin", line 1, in
module
TypeError: test2() got multiple values for keyword argument
'a'
#這里會報錯得原因是,總是先處理arg類型得參數
#該函數調用等價于
#處理arg類型參數:
a = 1
a = 1
#多次賦值,導致異常
#處理其他類型參數
...
print a,b,c
def foo(x,y):
... def bar():
x,y
... return bar
...
#查看func_closure的引用信息
a =
[1,2]
b = foo(a,0)
b.func_closure[0].cell_contents
[1, 2]
b.func_closure[1].cell_contents
b()
[1, 2] 0
#可變對象仍然能被修改
a.append(3)
b.func_closure[0].cell_contents
[1, 2, 3]
b()
[1, 2, 3] 0
喬治·布爾(George Boole,1815.11.2~1864),1815年11月2日生于英格蘭的林肯。19世紀最重要的數學家之一,出版了《邏輯的數學分析》 ,這是它對符號邏輯諸多貢獻中的第一次。
布爾的邏輯代數理論建立在兩種邏輯值“真True”、“假False”和三種邏輯關系“與AND”、“或OR”、“非NOT”。這種理論為數字電子計算機的二進制、形關邏輯元件和邏輯電路的設計輔平了道路。
馮·諾依曼奠定了現(xiàn)代計算機的基礎,被世人尊為“計算機之父”,但在談到他的理論與構思時,他謙虛地說,這些理論與構思的基礎來自于英國數學家圖靈和布爾的思想。
谷歌在2015年的網頁紀念了布爾誕辰200周年。
布爾值
計算機的邏輯判斷,只有兩種結果,就是True(英文意思是“真”)和False(英文意思是“假”)
在Python中:
只要數字零、空對象以及特殊對象None都被認作是假,其他為真
用 bool() 函數來查看一個數據會被判斷為真還是假
Python中有三種布爾表達式運算符:
x and y (兩者都)
x or y (兩者的其中之一)
not x (不)
not True就等于False,not False就等于True
實例:
True
False
True
False
布爾值操作符優(yōu)先級為 not and or
x是True,無論y and z 的結果是什么,這個語句的結果都是True,這就是短路保護,也叫說惰性計算,懶得計算后面的。
其實記得布爾值操作符優(yōu)先級為 not and or即可。
Python是通過代碼語句的縮進來體現(xiàn)邏輯關系的。代碼塊的開始和結束語句擁有相同的縮進量。
主調函數是本身固有的數,被調函數是通過其他數計算出來的
主調函數 調用別的函數實現(xiàn)功能
例如 A是主調函數 B是被調函數
void A()
{
B();
}