機器視覺--python基礎語法

Python基礎語法

1. Python標識符

在 Python 里,標識符由字母、數字、下劃線組成。

在 Python 中,所有標識符可以包括英文、數字以及下劃線(_),但不能以數字開頭。

Python 中的標識符是區分大小寫的。

以下劃線開頭的標識符是有特殊意義的。

  • 以單下劃線開頭 _foo的代表不能直接訪問的類屬性,需通過類提供的接口進行訪問,不能用 from xxx import * 而導入。

  • 以雙下劃線開頭的 __foo 代表類的私有成員。

  • 以雙下劃線開頭和結尾的 __foo__ 代表 Python 里特殊方法專用的標識,如 __init__() 代表類的構造函數。

補充:

Python 可以同一行顯示多條語句,方法是用分號 ; 分開,如:

>>> print ('hello');print ('runoob');
hello
runoob

2. Python保留字符

下面的列表顯示了在Python中的保留字。這些保留字不能用作常數或變數,或任何其他標識符名稱。

所有 Python 的關鍵字只包含小寫字母。

andexecnot
assertfinallyor
breakforpass
classfromprint
continueglobalraise
defifreturn
delimporttry
elifinwhile
elseiswith
exceptlambdayield

3. 行和縮進

學習 Python 與其他語言最大的區別就是,Python 的代碼塊不使用大括號 {} 來控制類,函數以及其他邏輯判斷。python 最具特色的就是用縮進來寫模塊。

縮進的空白數量是可變的,但是所有代碼塊語句必須包含相同的縮進空白數量,這個必須嚴格執行。

以下實例縮進為四個空格:

if True:print ("True")
else:print ("False")

以下代碼將會執行錯誤:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.pyif True:print ("Answer")print ("True")
else:print ("Answer")# 沒有嚴格縮進,在執行時會報錯print ("False")

4. Python引號

Python 可以使用引號( )、雙引號( " )、三引號( ‘’’“”" ) 來表示字符串,引號的開始與結束必須是相同類型的。

其中三引號可以由多行組成,編寫多行文本的快捷語法,常用于文檔字符串,在文件的特定地點,被當做注釋。

word = 'word'
sentence = "這是一個句子。"
paragraph = """這是一個段落。
包含了多個語句"""

5. Python注釋

Python中單行注釋采用 # 開頭。

Python 中多行注釋使用三個單引號 ''' 或三個雙引號 """

# 第一個注釋
print ("Hello, Python!")  # 第二個注釋'''
這是多行注釋,使用單引號。
這是多行注釋,使用單引號。
這是多行注釋,使用單引號。
'''"""
這是多行注釋,使用雙引號。
這是多行注釋,使用雙引號。
這是多行注釋,使用雙引號。
"""

6. Python空行

函數之間或類的方法之間用空行分隔,表示一段新的代碼的開始。類和函數入口之間也用一行空行分隔,以突出函數入口的開始。

空行與代碼縮進不同,空行并不是Python語法的一部分。書寫時不插入空行,Python解釋器運行也不會出錯。但是空行的作用在于分隔兩段不同功能或含義的代碼,便于日后代碼的維護或重構。

記住:空行也是程序代碼的一部分。

7. 輸入輸出

輸入輸出的最基本的方法就是控制臺(PyCharm下方彈出的窗口、windows自帶的cmd程序)。用戶通過控制臺輸入一些字符串, 程序再通過控制臺打印出一些字符串。

輸入輸出的最常見方法是圖形化界面。 如平時用到的 QQ, 瀏覽器, steam 等, 都不需要用戶輸入命令,

而只是通過鼠標點擊窗口點擊按鈕的方式來操作。

通過控制臺輸出

 print('hello')a = 10
print(a)b = True
print(b)

更多的時候, 我們希望能夠輸出的內容是混合了字符串和變量的。**例如:**輸出num = 10

num = 10
print(f'num = {num}')

注意:

  • 使用 f 作為前綴的字符串, 稱為 f-string

  • 里面可以使用 { } 來內嵌一個其他的變量/表達式

  • python里面還支持許多格式化字符串的方法,此處簡單理解即可

通過控制臺輸入

eg1:

num = 0
num = input('請輸入一個整數: ')
print(f'你輸入的整數是 {num}')

運行結果(綠色數字為輸入):

在這里插入圖片描述

注意:

  • input 的參數相當于一個“提示信息”,也可以沒有
  • input 的返回值就是用戶輸入的內容. 是字符串類型

eg2:

a = input('請輸入第一個整數: ')
b = input('請輸入第二個整數: ')print(f'a + b = {a + b}')

運行結果:

在這里插入圖片描述

此處的字符串是拼接不是算術運算,如果要想進行算術運算, 需要先轉換類型

eg3:

a = input('請輸入第一個整數: ')
b = input('請輸入第二個整數: ')a = int(a)
b = int(b)print(f'a + b = {a + b}')

運行結果:

在這里插入圖片描述

通過 int( ) 把變量轉成了 int 類型

類似的, 使用 float( ), bool( ), str( ) 等可以完成對應的類型轉換

8. 常量和表達式

可以把 Python 當成一個計算器, 來進行一些算術運算

print(1 + 2 - 3)print(1 + 2 * 3)print(1 + 2 / 3)

運行結果:

在這里插入圖片描述

形如 1 + 2 - 3 這樣是算式, 在編程語言中稱為 表達式, 算式的運算結果, 稱為 表達式的返回值

其中 1 , 2 , 3 這種稱為 字面值常量, + - * / 這種稱為 運算符 或者 操作符

注意:這里對于2/3這種計算結果,在一般類似于 C / Java 中結果為0(小數部分被截斷),但是在Python中得到的結果則是一個小數,更符合日常使用的直覺。

9. 變量和類型

變量的介紹

示例:

給定四個分數, 67.5, 89.0, 12.9, 32.2 , 編寫代碼, 求這四個分數的方差

PS: 方差的計算過程: 取每一項, 減去平均值, 計算平方, 再求和, 最后除以 (項數 - 1)

在這個代碼中,需要先計算四個數的平均值再計算方差,所以就需要一個變量保存平均數。

avg = (67.5 + 89.0 + 12.9 + 32.2)/4
total = (67.5 - avg)**2 + (89.0 - avg)**2 + (12.9 - avg)**2 + (32.2 - avg)**2
result = total/3
print(result)

注意:

  • avg, total, result 均為變量.
  • ** 在 Python 中表示乘方運算. ** 2 即為求平方

變量可以視為是一塊能夠容納數據的空間。這個空間往往對應到 “內存” 這樣的硬件設備上

在這里插入圖片描述

定義變量

a = 10

創建變量的語句非常簡單, 其中

  • a 為變量名. 當我們創建很多個變量的時候, 就可以用名字來進行區分
  • = 為賦值運算符, 表示把 = 右側的數據放到 = 左側的空間中

注意: 變量的名字要遵守一定規則

硬性規則(務必遵守)

  • 變量名由數字字母下劃線構成

  • 數字不能開頭

  • 變量名不能和 “關鍵字” 重復

  • 變量名大小寫敏感. num 和 Num 是兩個不同的變量名

軟性規則(建議遵守)

  • 變量名使用有描述性的單詞來表示, 盡量表達出變量的作用

  • 一個變量名可以由多個單詞構成, 長一點沒關系, 但是含義要清晰

  • 當變量名包含多個單詞的時候, 建議使用 “駝峰命名法”. 形如 totalCount , personInfo 這種, 除 了首個單詞外, 剩余單詞首字母大寫

數學上, 變量通常使用 x, y, z 這種簡單的英文字母或者拉丁字母表示. 但是在編程中不建議這樣使用

原因是編程中, 一個程序里通常會同時創建出很多個變量. 如果只是使用單個字母表示, 在變量多了 的時候, 就很難記住哪個變量是干啥的, 從而給維護程序帶來了一定的困難。因此我們更建議使用帶 有明確描述性的名字, 來表示變量的用途。

使用變量

讀取變量的值

a = 10
print(a)

修改變量的值

a = 20
print(a)

注意:在 Python 中, 修改變量也是使用 = 運算, 看起來和定義變量沒有明顯區別.

當然,也可以用一個變量的值賦給另外一個變量

a = 10
b = 20a = bprint(a)
print(b)

變量的類型

與C/Java不同,Python 變量的類型不需要顯式指定, 而是在賦值的時候確定的。

(1)整數

a = 10
print(type(a))

運行結果:

<class 'int'>

PS: type 和 print 類似, 也是 python 內置的函數. 可以使用 type 來查看一個變量的類型

注意:和 C++ / Java 等語言不同, Python 的 int 類型變量, 表示的數據范圍是沒有上限的. 只要內存足夠 大, 理論上就可以表示無限大小的數據

(2)浮點數(小數)

a = 0.5
print(type(a))

運行結果:

<class 'float'>

注意:和 C++ / Java 等語言不同, Python 的小數只有 float 一種類型, 沒有 double 類型。但是實際上 Python 的 float 就相當于 C++ / Java 的 double, 表示雙精度浮點數。

(3)字符串

a = 'hello'
print(type(a))

運行結果:

<class 'str'>

使用 ’ ’ 或者 " " 引起來的, 稱為 字符串. 可以用來表示文本

注意: 在 Python 中, 單引號構成的字符串和雙引號構成的字符串, 沒有區別. 'hello'"hello" 是 完全等價的。

補充:字符串的應用

可以使用len函數獲取字符串長度

a = 'hello'
print(len(a))

可以使用 + 針對兩個字符串進行拼接

a = 'hello'
b = 'world'
print(a + b)

此處是兩個字符相加,不能拿字符串和整數/浮點數相加

(4)布爾

布爾類型是一個特殊的類型, 取值只有兩種,True (真) 和 False (假)。

PS: 布爾類型也是數學上的一個概念. 初中就學過一個概念叫做 “命題” , 進一步的就可以判定 命題的真假

a = True
print(type(a))
b = False
print(type(b))

運行結果:

<class 'bool'>
<class 'bool'>

布爾類型在后續進行邏輯判斷的時候也非常重要。

(5)其他

除了上述類型之外,Python中還有list,tuple,dict,自定義類型。

補充:

  • 為什么需要這么多的類型?

    (1) 類型決定了數據在內存中占據多大空間。

    例如 float 類型在內存中占據 8 個字節。

    PS: 計算機里面使用二進制來表示數據. 也就是每個位只能表示 0 或者 1.

    1 個二進制位, 就稱為是一個 “比特”, 8 個二進制位, 就稱為一個 “字節” (Byte)

    一個 float 變量在內存中占據 8 個字節空間, 也就是 64 個二進制位

    電腦有 16GB 的內存空間, 也就是一共有 1024 * 1024 * 1024 * 8 這么多的二進制位

    (2) 類型其實約定了能對這個變量做什么樣的操作.

    例如 int / float 類型的變量, 可以進行 + - * / 等操作

    而 str 類型的變量, 只能進行 + (并且行為是字符串拼接), 不能進行 - * / , 但是還能使用 len 等其他操作.

    總結: 類型系統其實是在對變量進行 “歸類”. 相同類型的變量(數據) 往往具有類似的特性和使用規則

  • 動態類型特性

    在 Python 中, 一個變量是什么類型, 是可以在 “程序運行” 過程中發生變化的. 這個特性稱為 “動態類型”

    a = 10
    print(type(a))
    a = 'hello'
    print(type(a))
    

    運行結果:

    <class 'int'>
    <class 'str'>
    

    在程序執行過程中, a 的類型剛開始是 int, 后面變成了 str

    C++/Java 這樣的語言則不允許這樣的操作。 一個變量定義后類型就是固定的了. 這種特性則稱為 “靜 態類型”

    動態類型特性是一把雙刃劍

    • 對于中小型程序, 可以大大的解約代碼量(比如寫一段代碼就可以同時支持多種類型)

    • 對于大型程序, 則提高了模塊之間的交互成本(程序員 A 提供的代碼難以被 B 理解)

10. 關系運算符

(1)如果關系符合, 則表達式返回 True. 如果關系不符合, 則表達式返回 False

a = 10
b = 20print(a < b)	#Ture
print(a <= b)	#Ture
print(a > b)	#Flase
print(a >= b)	#Flase
print(a == b)	#Flase
print(a != b)	#Ture

(2)關系運算符不光針對整數/浮點數進行比較, 還能針對字符串進行比較

a = 'hello'
b = 'world'print(a < b)	#Ture
print(a <= b)	#Ture
print(a > b)	#Flase
print(a >= b)	#Flase
print(a == b)	#Flase
print(a != b)	#Ture

注意:

  • 直接使用 == 或者 != 即可對字符串內容判定相等 (這一點和 C / Java 不同).
  • 字符串比較大小, 規則是 “字典序”

關于字典序:

想象一個英文詞典, 上面的單詞都是按照字母順序排列. 如果首個字母相同, 就比較第二個字母 (就比如著名單詞 abandon)

我們認為一個單詞在詞典上越靠前, 就越小;越靠后, 就越大

(3)對于浮點數來說, 不要使用 == 判定相等

print(0.1 + 0.2 == 0.3)	#False

注意: 浮點數在計算機中的表示并不是精確的! 在計算過程中, 就容易出現非常小的誤差

print(0.1)
print(0.2)
print(0.3)
print(0.1 + 0.2)

運行結果:

在這里插入圖片描述

可以看到, 0.1 + 0.2 的結果并非是 0.3 , 雖然這個最后的數非常小了, 但是仍然會導致 == 的結果為 False。

現在很多主流語言都有這種問題,這個是 IEEE754 標準規定的浮點數格式所引入的問題,所以不需要做過多討論

正確的比較方式: 不再嚴格比較相等了, 而是判定差值小于允許的誤差范圍。

a = 0.1 + 0.2
b = 0.3print(-0.000001 < (a - b) < 0.000001)

實際工程實踐中, 誤差在所難免, 只要保證誤差在合理范圍內即可

11. 邏輯運算符

and or not 這一系列的運算符稱為 邏輯運算符

  • and 并且,兩側操作數均為 True, 最終結果為 True。 否則為 False。 (一假則假)
  • or 或者,兩側操作數均為 False, 最終結果為 False。 否則為 True。 (一真則真)
  • not 邏輯取反,操作數本身為 True, 則返回 False。 本身為 False,則返回 True。

注意:

一種特殊寫法

a < b and b < c 這個操作等價于 a < b < c 。 這個設定和大部分編程語言都不相同

關于短路求值

和其他編程語言類似, Python 也存在短路求值的規則.

  • 對于 and, 如果左側表達式為 False, 則整體一定為 False, 右側表達式不再執行

  • 對于 or, 如果左側表達式為 True, 則整體一定為 True, 右側表達式不再執行

print(10 > 20 and 10 / 0 == 1)	#False
print(10 < 20 or 10 / 0 == 1)	#True

上述代碼沒有拋出異常, 說明右側的除以 0 操作沒有真正執行

12. 賦值運算符

(1) = 的使用

= 表示賦值. 這個我們已經用過很多次了. 注意和 == 區分.

= 除了基本的用法之外, 還可以同時針對多個變量進行賦值.

鏈式賦值

a = b = 10

多元賦值

a, b = 10, 20

代碼實例: 交換兩個變量

#代碼1(基礎寫法)
a = 10
b = 20tmp = a
a = b
b = tmp#代碼2(多元賦值)
a = 10
b = 20a, b = b, a

(2) 復合賦值運算符

Python 還有一些 復合賦值運算符。 例如 += -= *= /= %=

其中 a += 1 等價于 a = a + 1 。 其他復合賦值運算符也是同理

注意: 像 C++ / Java 中, 存在 ++ -- 這樣的自增/自減運算符。 Python 中則不支持這種運算。 如果需要使用,

則直接使用 += 1 或者 -= 1

++ -- 最大的問題就是容易分不清前置和后置的區別。這一點 Python 語法在設計的時候就進行了 規避, 避免出現這種不直觀, 并且容易混淆的語法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74322.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法日常記錄

1. 鏈表 1.1 刪除鏈表的倒數第 N 個結點 問題描述&#xff1a;給你一個鏈表&#xff0c;刪除鏈表的倒數第 n 個結點&#xff0c;并且返回鏈表的頭結點。 輸入&#xff1a;head [1,2,3,4,5], n 2 輸出&#xff1a;[1,2,3,5] 思路&#xff1a;先讓fast跑n步&#xff0c;然后…

14使用按鈕實現helloworld(1)

目錄 還可以通過按鈕的方式來創建 hello world 涉及Qt 中的信號槽機制本質就是給按鈕的點擊操作,關聯上一個處理函數當用戶點擊的時候 就會執行這個處理函數 connect&#xff08;誰發的信號&#xff0c; 信號類型&#xff0c; 誰來處理這個信息&#xff0c; 怎么處理的&…

【Golang】泛型與類型約束

文章目錄 一、環境二、沒有泛型的Go三、泛型的優點四、理解泛型&#xff08;一&#xff09;泛型函數&#xff08;Generic function&#xff09;1&#xff09;定義2&#xff09;調用 &#xff08;二&#xff09;類型約束&#xff08;Type constraint&#xff09;1&#xff09;接…

k8s常用總結

1. Kubernetes 架構概覽 主節點&#xff08;Master&#xff09;&#xff1a; 負責集群管理&#xff0c;包括 API Server、Controller Manager、Scheduler 和 etcd 存儲。 工作節點&#xff08;Node&#xff09;&#xff1a; 運行 Pod 和容器&#xff0c;包含 kubelet、kube-pr…

Android 單例模式全解析:從基礎實現到最佳實踐

單例模式&#xff08;Singleton Pattern&#xff09;是軟件開發中常用的設計模式&#xff0c;其核心是確保一個類在全局范圍內只有一個實例&#xff0c;并提供全局訪問點。在 Android 開發中&#xff0c;單例模式常用于管理全局資源&#xff08;如網絡管理器、數據庫助手、配置…

ffmpeg濾鏡使用

ffmpeg實現畫中畫效果 FFmpeg中&#xff0c;可以通過overlay將多個視頻流、多個多媒體采集設備、多個視頻文件合并到一個界面中&#xff0c;生成畫中畫的效果 FFmpeg 濾鏡 overlay 基本參數 x和y x坐標和Y坐標 eof action 遇到 eof表示時的處理方式&#xff0c;默認為重復。…

OpenAI即將開源!DeepSeek“逼宮”下,AI爭奪戰將走向何方?

OpenAI 終于要 Open 了。 北京時間 4 月 1 日凌晨&#xff0c;OpenAI 正式宣布&#xff1a;將在未來幾個月內開源一款具備推理能力的語言模型&#xff0c;并開放訓練權重參數。這是自 2019 年 GPT-2 部分開源以來&#xff0c;OpenAI 首次向公眾開放核心模型技術。 【圖片來源于…

貪心算法,其優缺點是什么?

什么是貪心算法&#xff1f; 貪心算法(Greedy Algorithm)是一種在每一步選擇中都采取在當前狀態下最優(局部最優)的選擇&#xff0c;從而希望導致全局最優解的算法策略。 它不像動態規劃那樣考慮所有可能的子問題&#xff0c;而是做出局部最優選擇&#xff0c;依賴這些選擇來…

python string 類型字符拼接 +=的缺點,以及取代方法

在Python中&#xff0c;使用進行字符串拼接雖然語法簡單&#xff0c;但在性能和代碼維護方面存在明顯缺陷。以下是詳細分析及替代方案&#xff1a; 一、的缺點 性能低下 內存分配問題&#xff1a;字符串在Python中不可變&#xff0c;每次操作會創建新字符串對象&#xff0c;導…

web前端開發-JS

web前端開發-JS 什么是JavaScript Web標準也稱網頁標準,由一系列的標準組成,大部分由W3C(World Wide Web Consortium,萬維網聯盟)負責制定。三個組成部分: HTML:負責網頁的結構(頁面元素和內容)。CSS:負責網頁的表現(頁面元素的外觀、位置等頁面樣式,如:顏色、大小等)。JavaS…

Turtle綜合案例實戰(繪制復雜圖形、小游戲)

在學習了 Turtle 基本的繪圖技巧后,我們可以通過結合多個概念和技巧,繪制復雜的圖形或實現簡單的小游戲。本章將介紹兩個實戰案例: 繪制復雜圖形:結合前面所學的知識,繪制一個精美的多層次復雜圖案。簡單的游戲:利用 Turtle 實現一個簡單的小游戲——蛇形游戲,這是一個經…

Python設計模式:克隆模式

1. 什么是克隆模式 克隆模式的核心思想是通過復制一個已有的對象&#xff08;原型&#xff09;來創建一個新的對象&#xff08;克隆&#xff09;。這種方式可以避免重復的初始化過程&#xff0c;從而提高效率。克隆模式通常涉及以下幾個方面&#xff1a; 原型對象&#xff1a…

邏輯漏洞之越權訪問總結

什么是越權訪問漏洞&#xff1f; “越權訪問漏洞” 是 “邏輯漏洞” 的一種&#xff0c;是由于網站系統的權限校驗的邏輯不夠嚴謹&#xff0c;沒有對用戶權限進行嚴格的身份鑒別&#xff0c;導致普通權限的用戶做到了其它普通用戶或管理員才能完成的操作&#xff0c;稱之為“越…

超短波通信模擬設備:增強通信能力的關鍵工具

在全球信息化戰爭的背景下&#xff0c;通信系統扮演著至關重要的角色。為確保通信系統的穩定性和抗干擾能力&#xff0c;超短波通信模擬設備應運而生&#xff0c;為軍事訓練和通信干擾任務提供強大的支持。 設備特點及優勢 便攜性&#xff1a;設備體積小、重量輕&#xff0c;…

C++STL——容器-vector(含部分模擬實現,即地層實現原理)(含迭代器失效問題)

目錄 容器——vector 1.構造 模擬實現 2.迭代器 模擬實現&#xff1a; ?編輯 3.容量 模擬實現&#xff1a; 4.元素的訪問 模擬實現 5.元素的增刪查改 迭代器失效問題&#xff1a; 思考問題 【注】&#xff1a;這里的模擬實現所寫的參數以及返回值&#xff0c;都是…

Ubuntu交叉編譯器工具鏈安裝

聲明 本博客所記錄的關于正點原子i.MX6ULL開發板的學習筆記&#xff0c;&#xff08;內容參照正點原子I.MX6U嵌入式linux驅動開發指南&#xff0c;可在正點原子官方獲取正點原子Linux開發板 — 正點原子資料下載中心 1.0.0 文檔&#xff09;&#xff0c;旨在如實記錄我在學校學…

Tomcat 部署 Jenkins.war 詳細教程(含常見問題解決)

在Tomcat中部署Jenkins.war文件是一個相對簡單的過程&#xff0c;以下是詳細步驟&#xff1a; 1. 準備工作 確保已安裝JDK&#xff1a;Jenkins需要Java環境&#xff0c;建議安裝JDK 8或更高版本。 下載Jenkins.war&#xff1a;https://pan.quark.cn/s/c4fd7711a1b3 下載Tomc…

DAY46 動態規劃Ⅸ 股票問題Ⅱ

188. 買賣股票的最佳時機 IV - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxProfit(int k, vector<int>& prices) {if(prices.size()0) return 0;vector<vector<int>>dp(prices.size(),vector<int>(2*k1,0));for(int i…

4月2日工作日志

一個樸實無華的目錄 今日學習內容&#xff1a;1.UIAbility生命周期2.默認啟動頁面設置3.同模塊喚起ability 今日實操內容&#xff1a; 今日學習內容&#xff1a; 1.UIAbility生命周期 2.默認啟動頁面設置 3.同模塊喚起ability 今日實操內容&#xff1a; 通過分組件文件&#…

鴻蒙學習筆記(4)-Radio組件、彈框組件、組件內部狀態、工具類

一、Radio組件 &#xff08;1&#xff09;簡述 創建單選框組件。接收一個RadioOptions類型對象參數。 名稱類型必填說明valuestring是 當前單選框的值。 groupstring是 當前單選框的所屬群組名稱&#xff0c;相同group的Radio只能有一個被選中。 indicatorType12RadioIndica…