⑴ python中「物理行」和「邏輯行」的區別
物理行:就是程序員所寫代碼的所在行。
邏輯行:是指源代碼經過預編譯後,代碼所在的那一行。
Python假定每個物理行都對應著一個邏輯行。例如:print( "Hello World" ) 就是一個物理行,Python希望每行只有一個語句,因為這樣看起來更加易讀。
如果你想要在一個物理行中使用多於一個邏輯行,那麼你需要使用分號(; )來特別地標明這種用法。分號表示一個邏輯行/語句的結束。
⑵ python中= 和==的區別
在Python"
//
"表示整數除法。
Python其它表達式:
Python的表達式寫法與C/C++類似。只是在某些寫法有所差別。
主要的算術運算符與C/C++類似。+,
-,
*,
/,
//,
**,
~,
%分別表示加法或者取正、減法或者取負、乘法、除法、整除、乘方、取補、取余。
>>,
<<表示右移和左移。&,
|,
^表示二進制的AND,
OR,
XOR運算。>,
<,
==,
!=,
<=,
>=用於比較兩個表達式的值,
分別表示大於、小於、等於、不等於、小於等於、大於等於。在這些運算符裡面,~,
|,
^,
&,
<<,
>>必須應用於整數。
(2)python邏輯值和值的區別擴展閱讀:
Python使用and,
or,
not表示邏輯運算。
is,
is
not用於比較兩個變數是否是同一個對象。in,
not
in用於判斷一個對象是否屬於另外一個對象。
Python支持「列表推導式」(list
comprehension),比如計算0-9的平方和:
>>>
sum(x
*
x
for
x
in
range(10))
285
Python使用lambda表示匿名函數。匿名函數體只能是表達式。比如:
>>>
add=lambda
x,
y
:
x
+
y
>>>
add(3,2)
Python使用y
if
cond
else
x表示條件表達式。意思是當cond為真時,表達式的值為y,否則表達式的值為x。相當於C++和Java里的cond?y:x。
Python區分列表(list)和元組(tuple)兩種類型。list的寫法是[1,2,3],而tuple的寫法是(1,2,3)。可以改變list中的元素,而不能改變tuple。
在某些情況下,tuple的括弧可以省略。tuple對於賦值語句有特殊的處理。因此,可以同時賦值給多個變數,比如:
>>>
x,
y=1,2
#
同時給x,y賦值,最終結果:x=1,
y=2
特別地,可以使用以下這種形式來交換兩個變數的值:
>>>
x,
y=y,
x
#最終結果:y=1,
x=2
Python使用'(單引號)和"(雙引號)來表示字元串。與Perl、Unix
Shell語言或者Ruby、Groovy等語言不一樣,兩種符號作用相同。一般地,如果字元串中出現了雙引號,就使用單引號來表示字元串;反之則使用雙引號。如果都沒有出現,就依個人喜好選擇。
出現在字元串中的\(反斜杠)被解釋為特殊字元,比如\n表示換行符。表達式前加r指示Python不解釋字元串中出現的\。這種寫法通常用於編寫正則表達式或者Windows文件路徑。
Python支持列表切割(list
slices),可以取得完整列表的一部分。支持切割操作的類型有str,
bytes,
list,
tuple等。
它的語法是...[left:right]或者...[left:right:stride]。假定nums變數的值是[1,
3,
5,
7,
8,
13,
20],那麼下面幾個語句為真:
nums[2:5]
==
[5,
7,
8]
從下標為2的元素切割到下標為5的元素,但不包含下標為5的元素。
nums[1:]
==
[3,
5,
7,
8,
13,
20]
切割到最後一個元素。
nums[:-3]
==
[1,
3,
5,
7]
從最開始的元素一直切割到倒數第3個元素。
nums[:]
==
[1,
3,
5,
7,
8,
13,
20]
返回所有元素。改變新的列表不會影響到nums。
nums[1:5:2]
==
[3,
7]
從下標為1的元素切割到下標為5的元素但不包含下標為5的元素,且步長為2。
參考資料:
搜狗網路——Python(計算機程序設計語言)
⑶ 請教一個關於python的問題
布爾類型是一個邏輯量,區別於算術量的是邏輯量表示了兩個對立的矛盾,也就是說邏輯值只可能有兩個,就是真和假。
在python中(也在大多數的編程語言中),真(True)在計算機內部表示為數值類型1,而假(False)表示成0.
可以在python中測試:True == 1 結果為True,False == 0 結果為False.但是True == 任何其他的(不是1) 都為False, False也同理。
這只是計算機表示的問題,python規定 None,『』,「」,「」「」「」,'''''',(),[],{},0,0.0,0L,0j,False為假,其他為真。
a=b 是算術運算,即把b的值賦給a,在計算機內部,由於python是由c語言實現的,用到了指針,a和b指向了同一塊內存。
可測試:a=1 然後 b=a 比較id(a)和id(b),結果是一樣的,說明a和b的地址一樣。
a==b 是邏輯運算,得出的是邏輯值,就是真或假。
那怎麼用呢?很簡單,當要處理算術問題的時候當然用算術運算,有邏輯問題(通常所說的判斷)的時候呢就用邏輯運算啦。
⑷ Python中的10條冷門知識
下面時Python中一些不常見的冷門知識,感興趣的小夥伴不妨來學習一下。
1、省略號也是對象
… 這是省略號,在Python中,一切皆對象。它也不例外。在 Python 中,它叫做 Ellipsis 。在 Python 3 中你可以直接寫…來得到這玩意。
>>> ...
Ellipsis
>>> type(...)
<class 'ellipsis'>
而在 Python2 中沒有…這個語法,只能直接寫Ellipsis來獲取。
>>> Ellipsis
Ellipsis
>>> type(Ellipsis)
<type 'ellipsis'>
它轉為布爾值時為真
>>> bool(...)
True
最後,這東西是一個單例。
>>> id(...)
4362672336
>>> id(...)
4362672336
這東西有啥用呢?據說它是Numpy的語法糖,不玩 Numpy 的人,可以說是沒啥用的。
在網上只看到這個 用 … 代替 pass ,稍微有點用,但又不是必須使用的。
try:
1/0
except ZeroDivisionError:
...
2、增量賦值的性能更好
諸如 += 和 *= 這些運算符,叫做 增量賦值運算符。這里使用用 += 舉例,以下兩種寫法,在效果上是等價的。
# 第一種
a = 1 ; a += 1
# 第二種
a = 1; a = a + 1
+= 其背後使用的魔法方法是 iadd,如果沒有實現這個方法則會退而求其次,使用 add 。
這兩種寫法有什麼區別呢?
用列表舉例 a += b,使用 add 的話就像是使用了a.extend(b),如果使用 add 的話,則是 a = a+b,前者是直接在原列表上進行擴展,而後者是先從原列表中取出值,在一個新的列表中進行擴展,然後再將新的列表對象返回給變數,顯然後者的消耗要大些。
所以在能使用增量賦值的時候盡量使用它。
3、and 和or 的取值順序
and 和 or 是我們再熟悉不過的兩個邏輯運算符。而我們通常只用它來做判斷,很少用它來取值。
如果一個or表達式中所有值都為真,Python會選擇第一個值,而and表達式則會選擇第二個。
>>>(2 or 3) * (5 and 7)
14 # 2*7
4、修改解釋器提示符
>>> import sys
>>> sys.ps1
'>>> '
>>> sys.ps2
'... '
>>>
>>> sys.ps2 = '---------------- '
>>> sys.ps1 = 'Python編程時光>>>'
Python編程時光>>>for i in range(2):
---------------- print (i)
----------------
5、默認參數最好不為可變對象
函數的參數分三種
可變參數
默認參數
關鍵字參數
今天要說的是,傳遞默認參數時,新手很容易踩雷的一個坑。
先來看一個示例:
def func(item, item_list=[]):
item_list.append(item)
print(item_list)
func('iphone')
func('xiaomi', item_list=['oppo','vivo'])
func('huawei')
在這里,你可以暫停一下,思考一下會輸出什麼?
思考過後,你的答案是否和下面的一致呢
['iphone']
['oppo', 'vivo', 'xiaomi']
['iphone', 'huawei']
如果是,那你可以跳過這部分內容,如果不是,請接著往下看,這里來分析一下。
Python 中的 def 語句在每次執行的時候都初始化一個函數對象,這個函數對象就是我們要調用的函數,可以把它當成一個一般的對象,只不過這個對象擁有一個可執行的方法和部分屬性。
對於參數中提供了初始值的參數,由於 Python 中的函數參數傳遞的是對象,也可以認為是傳地址,在第一次初始化 def 的時候,會先生成這個可變對象的內存地址,然後將這個默認參數 item_list 會與這個內存地址綁定。在後面的函數調用中,如果調用方指定了新的默認值,就會將原來的默認值覆蓋。如果調用方沒有指定新的默認值,那就會使用原來的默認值。
在這里插入圖片描述
6、訪問類中的私有方法
大家都知道,類中可供直接調用的方法,只有公有方法(protected類型的方法也可以,但是不建議)。也就是說,類的私有方法是無法直接調用的。
這里先看一下例子
class Kls():
def public(self):
print('Hello public world!')
def __private(self):
print('Hello private world!')
def call_private(self):
self.__private()
ins = Kls()
# 調用公有方法,沒問題
ins.public()
# 直接調用私有方法,不行
ins.__private()
# 但你可以通過內部公有方法,進行代理
ins.call_private()
既然都是方法,那我們真的沒有方法可以直接調用嗎?
當然有啦,只是建議你千萬不要這樣弄,這里只是普及,讓你了解一下。
# 調用私有方法,以下兩種等價
ins._Kls__private()
ins.call_private()
7、時有時無的切片異常
這是個簡單例子
my_list = [1, 2, 3, 4, 5]
print(my_list[5])
Traceback (most recent call last):
File "F:/Python Script/test.py", line 2, in <mole>
print(my_list[5])
IndexError: list index out of range
來看看,如下這種寫法就不會報索引異常,執行my_list[5:],會返回一個新list:[]。
my_list = [1, 2, 3]
print(my_list[5:])
8、for 死循環
for 循環可以說是 基礎得不能再基礎的知識點了。但是如果讓你用 for 寫一個死循環,你會寫嗎?(問題來自群友 陳**)
這是個開放性的問題,在往下看之前,建議你先嘗試自己思考,你會如何解答。
好了,如果你還沒有思路,那就來看一下 一個海外 MIT 群友的回答:
for i in iter(int, 1):pass
是不是懵逼了。iter 還有這種用法?這為啥是個死循環?
這真的是個冷知識,關於這個知識點,你如果看中文網站,可能找不到相關資料。
還好你可以通過 IDE 看py源碼里的注釋內容,介紹了很詳細的使用方法。
原來iter有兩種使用方法,通常我們的認知是第一種,將一個列表轉化為一個迭代器。
而第二種方法,他接收一個 callable對象,和一個sentinel 參數。第一個對象會一直運行,直到它返回 sentinel 值才結束。
在這里插入圖片描述
那int 呢,這又是一個知識點,int 是一個內建方法。通過看注釋,可以看出它是有默認值0的。你可以在終端上輸入 int() 看看是不是返回0。
在這里插入圖片描述
由於int() 永遠返回0,永遠返回不了1,所以這個 for 循環會沒有終點。一直運行下去。
9、奇怪的字元串
字元串類型作為 Python 中最常用的數據類型之一,Python解釋器為了提高字元串使用的效率和使用性能,做了很多優化。
例如:Python 解釋器中使用了 intern(字元串駐留)的技術來提高字元串效率。
什麼是 intern 機制?就是同樣的字元串對象僅僅會保存一份,放在一個字元串儲蓄池中,是共用的,當然,肯定不能改變,這也決定了字元串必須是不可變對象。
示例一
# Python2.7
>>> a = "Hello_Python"
>>> id(a)
32045616
>>> id("Hello" + "_" + "Python")
32045616
# Python3.7
>>> a = "Hello_Python"
>>> id(a)
38764272
>>> id("Hello" + "_" + "Python")
32045616
示例二
>>> a = "MING"
>>> b = "MING"
>>> a is b
True
# Python2.7
>>> a, b = "MING!", "MING!"
>>> a is b
True
# Python3.7
>>> a, b = "MING!", "MING!"
>>> a is b
False
示例三
# Python2.7
>>> 'a' * 20 is 'aaaaaaaaaaaaaaaaaaaa'
True
>>> 'a' * 21 is 'aaaaaaaaaaaaaaaaaaaaa'
False
# Python3.7
>>> 'a' * 20 is 'aaaaaaaaaaaaaaaaaaaa'
True
>>> 'a' * 21 is 'aaaaaaaaaaaaaaaaaaaaa'
True
示例四
>>> s1="hello"
>>> s2="hello"
>>> s1 is s2
True
# 如果有空格,默認不啟用intern機制
>>> s1="hell o"
>>> s2="hell o"
>>> s1 is s2
False
# 如果一個字元串長度超過20個字元,不啟動intern機制
>>> s1 = "a" * 20
>>> s2 = "a" * 20
>>> s1 is s2
True
>>> s1 = "a" * 21
>>> s2 = "a" * 21
>>> s1 is s2
False
>>> s1 = "ab" * 10
>>> s2 = "ab" * 10
>>> s1 is s2
True
>>> s1 = "ab" * 11
>>> s2 = "ab" * 11
>>> s1 is s2
False
10、兩次return
我們都知道,try…finally… 語句的用法,不管 try 裡面是正常執行還是報異常,最終都能保證finally能夠執行。
同時,我們又知道,一個函數里只要遇到 return 函數就會立馬結束。
基於以上這兩點,我們來看看這個例子,到底運行過程是怎麼樣的?
>>> def func():
... try:
... return 'try'
... finally:
... return 'finally'
...
>>> func()
'finally'
驚奇的發現,在try里的return居然不起作用。
原因是,在try…finally…語句中,try中的return會被直接忽視,因為要保證finally能夠執行。
⑸ 我想問下python中 邏輯與:「&」和「and」的區別
1、「&」和「and」有本質區別,屬於不同類型的運行符號。& 是位運算;and 是邏輯運算。
2、首先是&:該運輸符屬於字元串的連接運算符,例如,「w「&」c「結果為字元串」wc「。
3、and屬於邏輯運算符,表示邏輯與運算,其規則是有假取假,全真為真。例如,true and false結果為false,true and true結果為true。
(5)python邏輯值和值的區別擴展閱讀
Python的設計哲學是「優雅」、「明確」、「簡單」。因此,Perl語言中「總是有多種方法來做同一件事」的理念在Python開發者中通常是難以忍受的。Python開發者的哲學是「用一種方法,最好是只有一種方法來做一件事」。
在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。
由於這種設計觀念的差異,Python源代碼通常被認為比Perl具備更好的可讀性,並且能夠支撐大規模的軟體開發。這些准則被稱為Python格言。在Python解釋器內運行import this可以獲得完整的列表。
Python開發人員盡量避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁通常不會被合並到Python內。所以很多人認為Python很慢。
不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的情況,Python設計師傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程序。可用的JIT技術是PyPy。
Python是完全面向對象的語言。函數、模塊、數字、字元串都是對象。並且完全支持繼承、重載、派生、多繼承,有益於增強源代碼的復用性。
Python支持重載運算符和動態類型。相對於Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標准庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。
雖然Python可能被粗略地分類為「腳本語言」(script language),但實際上一些大規模軟體開發計劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。
Python的支持者較喜歡稱它為一種高級動態編程語言,原因是「腳本語言」泛指僅作簡單程序設計任務的語言,如shellscript、VBScript等只能處理簡單任務的編程語言,並不能與Python相提並論。
Python本身被設計為可擴充的。並非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言、C++、Cython來編寫擴充模塊。Python編譯器本身也可以被集成到其它需要腳本語言的程序內。
因此,很多人還把Python作為一種「膠水語言」(glue language)使用。使用Python將其他語言編寫的程序進行集成和封裝。在Google內部的很多項目,例如Google Engine使用C++編寫性能要求極高的部分,然後用Python或Java/Go調用相應的模塊。
《Python技術手冊》的作者馬特利(Alex Martelli)說:「這很難講,不過,2004 年,Python 已在Google內部使用,Google 召募許多 Python 高手,但在這之前就已決定使用Python,
他們的目的是 Python where we can, C++ where we must,在操控硬體的場合使用 C++,在快速開發時候使用 Python。」
⑹ python中的邏輯運算
邏輯運算並不限於布爾(boolean)型的變數/值。
關鍵是一個變數/值是「相當於」True還是False。
None、False、空字元串""、0、空列表[]、空字典{}、空元組(),都相當於False。其它的都相當於True。
先說 A or B 。
如果A相當於True,那麼返回A。否則,返回B。
所以,如果A和B都是False,那麼A and B也是False (False or False == False)。
除了做布爾值的判斷,C = A or B 這種寫法,常用於不確定A是否為空值時,把B作為候補來賦值給C。
A and B相反。如果A相當於True,那麼返回B。否則,返回A。
所以,只有A和B都是True時,A and B才是True (True and True == True)。
以上是我自己寫的,原創。
⑺ python 的運行邏輯
只聽過幾節入門課,不是很懂,我網路查過之後理解為:
你只是簡單地將my_foods賦給friend_foods,而不是將my_foods的副本存儲到friend_foods,這樣實際上是讓Python將新變數關聯到舊變數中的列表,因此這兩個變數都指向同一個列表。這是不使用切片的情況下復制列表的情況。要創建切片,可指定要使用的第一個元素和最後一個元素的索引。(列表中部分元素,Python稱之為切片。)
如果 你想friends_foods不添加進新元素,應該加上[:]
以上是復制列表的方法——可創建一個包含整個列表的切片,方法是同時省略起始索引和終止索引([:])。這讓Python創建一個始於第一個元素,終止於最後一個元素的切片,即復制整個列表。如上圖所示。
建議先學習一下關於切片的相關知識再來理解會比較容易。
⑻ 問一個python邏輯運算符的初級問題!
and 是短路運算符,python中,非0值都代表邏輯真,邏輯運算時返回最後運算的結果。例如:
5 and 2 ,返回最後運算的2。
2 and 5,返回5。
5 and 0,返回0。
0 and 5,還是返回0。因為0代表假,and 不再進行運算了,直接被短路,返回0
⑼ 我們學習過的python中的邏輯運算符有哪些它們的運算規則如何
and :布爾"與" - 如果 x 為 False,x and y 返回 False,否則它返回 y 的計算值。
or :布爾"或" - 如果 x 是非 0,它返回 x 的計算值,否則它返回 y 的計算值。
not :布爾"非" - 如果 x 為 True,返回 False 。如果 x 為 False,它返回 True。
需要詳細講解或實例請追問。
順便推薦兩個自學網站菜鳥教程 - 學的不僅是技術,更是夢想!W3school在線教程
內有豐富的編程基礎知識。比如Python 邏輯運算符 | 菜鳥教程Python 運算符 - W3school
比在網上提問等人回答快多了也准確多了,對吧?
⑽ python邏輯運算符有哪些
邏輯運算符用於組合多個條件測試語句。假設「我今年18歲」和「我身高2米」這兩個語句,前一個語句是真的,後一個語句是假的,因此,「我今年18歲,並且我身高2米」這個語句是假的。其中,「並且」可以認為是邏輯運算符。Python中有三種邏輯運算符,分別是and、or和not。
一、邏輯運算符and
在某些場景下,需要同時檢查兩個甚至更多的條件。假設某運動隊招收運動員的要求是年齡不得低於14周歲,同時身體健康,使用邏輯運算符and來判斷是否符合要求:
在布爾表達式「(math >= 95 and chinese > 85) or (math >= 85 and chinese > 90)」中,使用or運算符連接的兩個布爾表達式「math >= 95 and chinese > 85」和「math >= 85 and chinese > 90」只要有一個值為True,返回值就為True。而對於布爾表達式「math >= 95 and chinese > 85」和「math >= 85 and chinese > 90」,都是使用and運算符連接的,故and運算符連接的兩個布爾表達式的值必須都為True,返回值才為True。小明的數學成績是98分,語文成績是88分,布爾表達式「math >= 95 and chinese > 85」的值為True,「math >= 85 and chinese > 90」的值為False,因此,整個布爾表達式的值為True,列印「小明獲得家庭獎學金!」。
關於深度學習的基礎問題可以看下這個網頁的視頻教程,網頁鏈接,希望我的回答能幫到你。