[Python基礎速成]1-Python規范與核心語法

本系列旨在快速掌握Python,實現能夠快速閱讀和理解 Python 代碼,并在可查閱語法的情況下進行 AI 學習。
本篇先了解一下Python基礎知識。
本篇內容較菜鳥教程有所刪減、方便快速構建大綱,且加入了PEP 8規范說明等有助于理解和編寫代碼的說明。

因為是Java程序員視角學習Python,所以會有一些與Java的比較。

目錄

  • 資料推薦
  • Python格式規范
    • 編碼
    • PEP 8規則
    • 標識符
    • 注釋
    • 縮進(Python怎么寫)
  • Python關鍵字
  • Python核心語法
    • 變量與數據類型
      • 基本類型
      • 迭代器
      • 類型轉換
    • 控制流
    • 函數
      • 定義函數
      • 參數傳遞機制
      • 裝飾器
    • 異常處理
      • 語法
      • with
      • 自定義異常
  • 掌握測試-使用Python來解leetcode

資料推薦

菜鳥教程
《python入門到實踐》

Python格式規范

編碼

默認情況下,Python3 源碼文件以 UTF-8 編碼,所有字符串都是 unicode 字符串。

PEP 8規則

Python官方的規范PEP 8。
里面有各種規范,這里簡單介紹一下命名規范。

  • 變量
    不要使用I、O字符作為單個字符變量名。
    常量為大寫字母+下劃線。

  • 模塊名
    模塊名全小寫,下劃線分割。

  • 類名
    類名CapWords規范,即同Java一樣首字母大寫。
    異常類后綴使用Error。

  • 函數名
    小寫+下劃線。
    實例方法第一個參數用self。
    類方法第一個參數用cls。
    使用下劃線優于縮寫。

  • 前導線_約定

公開屬性不應有前導下劃線_
僅對非公共方法和實例變量使用一個前導下劃線_
使用雙前導下劃線__命名可能與設計為子類的類中的屬性發生沖突的屬性。

標識符

  • 第一個字符必須以字母(a-z, A-Z)或下劃線 _ 。
  • 標識符的其他的部分由字母、數字和下劃線組成。
  • 標識符對大小寫敏感,count 和 Count 是不同的標識符。
  • 標識符對長度無硬性限制,但建議保持簡潔(一般不超過 20 個字符)。
  • 禁止使用保留關鍵字,如 if、for、class 等不能作為標識符。

注釋

#!/usr/bin/python3# 第一個注釋
# 第二個注釋'''
第三注釋
第四注釋
'''"""
第五注釋
第六注釋
"""
print ("Hello, Python!")

縮進(Python怎么寫)

python最具特色的就是使用縮進來表示代碼塊,不需要使用大括號 {} 。

縮進的空格數是可變的,但是同一個代碼塊的語句必須包含相同的縮進空格數。

縮進一致默認為同一個代碼快,使用反斜杠\可以實現多行語句。

Python換行不需要使用分號;來標識結束。

Python關鍵字

python關鍵字可以使用下列代碼打印出來。

import keywordprint(keyword.kwlist)

[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]

Python核心語法

變量與數據類型

字符串、數字、列表、元組、字典、集合(重點:列表和字典,類似Java的List和Map)。

基本類型

python的變量不需要聲明,類型在運行時自動推斷,且可隨時改變。即動態類型特征。

x = 10
# 整數轉換成字符串
x = "hello"

Java10+開始支持var關鍵字,支持局部變量類型推斷,但是不同的是Java的var聲明后類型不可以更改。

類型可以隨時更改,但是內容不一樣。
Python3 的六個標準數據類型中:

  • **不可變數據(3 個):Number(數字)、String(字符串)、Tuple(元組);
  • **可變數據(3 個):List(列表)、Dictionary(字典)、Set(集合)。

不可變immutable的類型一旦創建,內部內容不可修改,修改操作實際上是創建了一個新的對象。

a = "hello"
a += " world"  # 實際是新建了一個字符串對象,a 指向新對象

可變mutable的類型內部內容可直接修改,而對象本身(內存地址)不變。

  • Tuple示例
    元組中的元素類型也可以不相同。有序。
tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2  )
  • List示例
    和Java不一樣,Python的List可存放任意類型(動態類型),運行時動態推斷,無編譯時類型約束。
    Java的List存Object是編譯時類型擦除,需要保證是Object子類,沒有Python的靈活。

Python的List是有序的。

list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]  # 定義一個列表
  • Dictionary示例
    字典是無序的對象集合。鍵值對。
tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
  • Set示例
    Python 中的集合(Set)是一種無序、可變的數據類型,用于存儲唯一的元素。
sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}

迭代器

迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會后退。
迭代器有兩個基本的方法:iter() 和 next()。
字符串,列表或元組對象都可用于創建迭代器:

list = [1,2,3,4]
# 通過iter方法創建迭代器對象
it = iter(list)
# 使用next()方法獲取元素
print(next(it))

類似Java需要實現Iterator接口的hasNext()與next(),Python一個類需要作為迭代器使用需要在類中實現__iter__()與__next__()方法。

類型轉換

以下幾個內置的函數可以執行數據類型之間的轉換。這些函數返回一個新的對象,表示轉換的值。

函數描述
int(x [,base])將x轉換為一個整數
float(x)將x轉換到一個浮點數
complex(real [,imag])創建一個復數
str(x)將對象 x 轉換為字符串
repr(x)將對象 x 轉換為表達式字符串
eval(str)用來計算在字符串中的有效Python表達式,并返回一個對象
tuple(s)將序列 s 轉換為一個元組
list(s)將序列 s 轉換為一個列表
set(s)轉換為可變集合
dict(d)創建一個字典。d 必須是一個 (key, value)元組序列。
frozenset(s)轉換為不可變集合
chr(x)將一個整數轉換為一個字符
ord(x)將一個字符轉換為它的整數值
hex(x)將一個整數轉換為一個十六進制字符串
oct(x)將一個整數轉換為一個八進制字符串
函數轉換為顯示轉換。

在隱式類型轉換中,Python 會自動將一種數據類型轉換為另一種數據類型,不需要我們去干預。

在使用上,Python的隱式類型轉換和Java的自動類型轉換效果一樣。
即較小類型轉換成較大類型以避免精度丟失,如int轉double。
都不允許使用不安全活不合理的轉換,如字符串直接轉數字。

兩者在使用上差別為Python支持布爾值轉換,布爾值在算術中隱式轉為int(True為1,False為0)。
Java不支持布爾值轉換,有限轉換類型為byte → short → int → long → float → double。

控制流

if、for、while(Python的循環比Java簡潔,注意縮進)。

  • if
if condition_1:statement_block_1
elif condition_2:statement_block_2
else:statement_block_3# python3.10新增 match...case 類似Java switch case
match subject:case <pattern_1>:<action_1>case <pattern_2>:<action_2>case <pattern_3>:<action_3>case _:<action_wildcard> # _ 可以匹配一切。 類似default
  • for
    python提供了for…else寫法,else在for結束后執行一次。相當于與finally
for <variable> in <sequence>:<statements>
else:<statements>
  • while
    python提供了while…else寫法,else執行一次。想當于while+if else
while 判斷條件(condition):執行語句(statements)……while counter <= n:sum = sum + countercounter += 1# 或者
while <expr>:<statement(s)>
else:<additional_statement(s)>

Python的continue和break與Java使用相同。

函數

定義、參數(默認參數、可變參數)、lambda表達式。

定義函數

可以使用def關鍵字定義一個完成函數。
![[Pasted image 20250414133812.png]]

也可以使用lambda來創建一個匿名函數,一般是簡單的、單行的函數,通常在需要函數作為參數傳遞的情況下使用。

lambda arguments: expression
# 無參
f = lambda: "Hello, world!"
print(f())  # 輸出: Hello, world!
# 有參
x = lambda a, b : a * b
print(x(5, 6))

lambda 函數通常與內置函數如 map()、filter() 和 reduce() 一起使用,以便在集合上執行操作。例如:

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared)  # 輸出: [1, 4, 9, 16, 25]

參數傳遞機制

Java嚴格采用值傳遞(Pass by Value),對象類型傳遞引用的副本。因此,Java函數內修改傳遞的值不會修改原值,通過傳遞的引用修改對象內容會影響原對象,將引用副本指向新的對象不會影響原應用。
Python的參數傳遞與Java一致。不可變對象表現為值傳遞,可變對象表現為“傳遞引用副本”。

裝飾器

裝飾器(decorators)是 Python 中的一種高級功能,它允許你動態地修改函數或類的行為。
![[Pasted image 20250414140726.png]]
類似于Java的注解。
多個裝飾器堆疊在一起,從下到上??順序依次應用。

異常處理

語法

語法try-except(類似Java的try-catch)。

def test_func():while True:try:x = int(input("請輸入一個數字: "))breakexcept ValueError as err:print("您輸入的不是數字,請再次嘗試輸入!")test_func()

和Java一樣,一個try可以對應多個except。
語法try/except…else。else 子句放在最后,將在 try 子句沒有發生任何異常的時候執行。

try-finally 語句。和Java的finally一樣,是否發生異常都將執行最后的代碼。

Python 使用 raise 語句拋出一個指定的異常。

raise [Exception [, args [, traceback]]]# 使用raise拋出異常
x = 10
if x > 5:raise Exception('x 不能大于 5。x 的值為: {}'.format(x))

僅使用raise關鍵字相當于直接拋出。

with

Python的with關鍵字類似Java的 try-with-resources 。語法如下:

# 文件操作(自動關閉)
with open('file.txt', 'r') as file:data = file.read()# 文件會在代碼塊結束后自動關閉,即使發生異常

類似的是Java使用try-with-resources 需要類實現了AutoCloseable接口,而Python的需要實現__enter__ 和 exit

自定義異常

異常類需要繼承Exception。

class MyError(Exception):def __init__(self, value):self.value = valuedef __str__(self):return repr(self.value)

大多數的異常的名字都以"Error"結尾,就跟標準的異常命名一樣。這里類繼承相關件后續Python面向對象篇章。

掌握測試-使用Python來解leetcode

每天用Python刷兩道簡單LeetCode維持手感。

下篇[Python基礎速成]2-模塊與包與OOP

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

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

相關文章

農民劇團的春天與改變之路

楊天義&#xff0c;男&#xff0c;1966年9月生&#xff0c;中共黨員&#xff0c;江西省吉安市吉水縣水南農民劇團團長。 楊天義從廢品收購起家&#xff0c;憑借自身的努力和奮斗&#xff0c;自籌資金100余萬元建設了水南鎮的第一座影劇院&#xff0c;組建了江西省吉安市吉水縣…

python asyncio 的基本使用

1、引言 asyncio 是 Python 標準庫中的一個庫&#xff0c;提供了對異步 I/O 、事件循環、協程和任務等異步編程模型的支持。 asyncio 文檔 2、進程、線程、協程 線程 線程是操作系統調度的基本單位&#xff0c;同一個進程中的多個線程共享相同的內存空間。線程之間的切換由操…

Leedcode刷題 | Day30_貪心算法04

一、學習任務 452. 用最少數量的箭引爆氣球代碼隨想錄435. 無重疊區間763. 劃分字母區間 二、具體題目 1.452用最少數量的箭引爆氣球452. 用最少數量的箭引爆氣球 - 力扣&#xff08;LeetCode&#xff09; 在二維空間中有許多球形的氣球。對于每個氣球&#xff0c;提供的輸…

Ant Design Vue 表格復雜數據合并單元格

Ant Design Vue 表格復雜數據合并單元格 官方合并效果 官方示例 表頭只支持列合并&#xff0c;使用 column 里的 colSpan 進行設置。 表格支持行/列合并&#xff0c;使用 render 里的單元格屬性 colSpan 或者 rowSpan 設值為 0 時&#xff0c;設置的表格不會渲染。 <temp…

C++ 標準庫中的 <algorithm> 頭文件算法總結

C 常用 <algorithm> 算法概覽 C 標準庫中的 <algorithm> 頭文件提供了大量有用的算法&#xff0c;主要用于操作容器&#xff08;如 vector, list, array 等&#xff09;。這些算法通常通過迭代器來操作容器元素。 1. 非修改序列操作 std::all_of, std::any_of, s…

程序化廣告行業(84/89):4A廣告代理公司與行業資質解讀

程序化廣告行業&#xff08;84/89&#xff09;&#xff1a;4A廣告代理公司與行業資質解讀 大家好&#xff01;在探索程序化廣告行業的道路上&#xff0c;每一次知識的分享都是我們共同進步的階梯。一直以來&#xff0c;我都希望能和大家攜手前行&#xff0c;深入了解這個充滿機…

deepin使用autokey添加微信快捷鍵一鍵顯隱ctrl+alt+w

打開deepin商店&#xff0c;搜索快捷鍵&#xff0c;找到autokey 快捷鍵管理&#xff0c;點擊安裝 點擊右鍵新建文件夾 點擊右鍵新建腳本 打開腳本并添加以下內容 import subprocess import time# ------------------ 配置項 ------------------ WM_CLASS "wechat…

文件內容課堂總結

Spark SQL是Spark用于結構化數據處理的模塊&#xff0c;前身是Shark。Shark基于Hive開發&#xff0c;雖提升了SQL-on-Hadoop效率&#xff0c;但對Hive依賴過多。2014年6月1日Shark項目停止開發&#xff0c;團隊將資源投入Spark SQL項目。Spark SQL具有諸多優點&#xff0c;如擺…

Zotero PDF Translate 翻譯插件使用OpenAI API配置教程

PDF Translate&#xff1a;提升 Zotero 內置 PDF 閱讀器的翻譯功能 “PDF Translate” 是一款為 Zotero 設計的插件&#xff0c;旨在方便用戶在 Zotero 內置的 PDF 閱讀器中進行劃詞或段落翻譯&#xff0c;輔助閱讀外文文獻。 一、 安裝插件 下載插件&#xff1a; 訪問 PDF T…

火山引擎旗下的產品

用戶問的是火山引擎旗下的產品&#xff0c;我需要詳細列出各個類別下的產品。首先&#xff0c;我得確認火山引擎有哪些主要業務領域&#xff0c;比如云計算、大數據、人工智能這些。然后&#xff0c;每個領域下具體有哪些產品呢&#xff1f;比如云計算方面可能有云服務器、容器…

C/C++程序中實現Python綁定多種技術路線

在C/C程序中實現Python綁定有多種技術路線&#xff0c;選擇合適的方法取決于項目需求、性能要求和開發效率。以下是常見的幾種方案&#xff0c;按易用性排序&#xff1a; 1. PyBind11&#xff08;推薦首選&#xff09; 特點&#xff1a;現代C庫&#xff0c;語法簡潔&#xff0…

【位運算】消失的兩個數字

文章目錄 面試題 17.19. 消失的兩個數字解題思路 面試題 17.19. 消失的兩個數字 面試題 17.19. 消失的兩個數字 ? 給定一個數組&#xff0c;包含從 1 到 N 所有的整數&#xff0c;但其中缺了兩個數字。你能在 O(N) 時間內只用 O(1) 的空間找到它們嗎&#xff1f; ? 以任意…

自然語言處理Hugging Face Transformers

Hugging Face Transformers 是一個基于 PyTorch 和 TensorFlow 的開源庫&#xff0c;專注于 最先進的自然語言處理&#xff08;NLP&#xff09;模型&#xff0c;如 BERT、GPT、RoBERTa、T5 等。它提供了 預訓練模型、微調工具和推理 API&#xff0c;廣泛應用于文本分類、機器翻…

vue開發基礎流程 (后20)

創建項目命令&#xff1b; 或者 vue create my - vue - router - project這個是創建帶路由的項目 22.組件組成 比如說一個頁面吧&#xff0c;他三個組件&#xff0c;template就是用來放所有的標簽&#xff0c;script用來放業務邏輯&#xff0c;style用來放樣式&#xff0c;c…

高性能內存kv數據庫Redis

引言 在當今數據驅動的時代&#xff0c;高效的數據存儲和檢索對于各類應用程序至關重要。Redis&#xff08;Remote Dictionary Server&#xff09;作為一款開源的內存鍵值數據庫&#xff0c;憑借其出色的性能、豐富的數據結構和靈活的特性&#xff0c;在眾多場景中得到了廣泛應…

自動化測試概念篇

文章目錄 目錄1. 自動化1.1 自動化概念1.1.1 回歸測試 1.2 自動化分類1.3 自動化測試金字塔 2. web自動化測試2.1 驅動2.1.1 安裝驅動管理2.1.2 selenium庫 3. Selenium3.1 一個簡單的web自動化示例3.2 selenium驅動瀏覽器的工作原理 目錄 自動化web自動化測試Selenium 1. 自…

《AI大模型應知應會100篇》第17篇:大模型的偏見與公平性問題

第17篇&#xff1a;大模型的偏見與公平性問題 摘要 在人工智能迅速發展的今天&#xff0c;大型語言模型&#xff08;LLM&#xff09;已經深入到我們的日常生活和工作中。然而&#xff0c;這些模型并非完美無缺&#xff0c;它們可能攜帶并放大數據中的偏見&#xff0c;導致不公…

【踩坑】GitHub Actions 運行的 Linux 環境中,文件名是大小寫敏感的

在使用 VuePress 搭建個人博客并部署到 GitHub Pages 的過程中&#xff0c;我遇到了一個頗為棘手的問題&#xff1a;本地打包一切正常&#xff0c;但在 GitHub Actions 自動執行打包流程時&#xff0c;卻提示找不到 README.md 文件&#xff0c;導致整個流程失敗。經過一番深入排…

C# 13新特性 - .NET 9

轉載&#xff1a; C# 13 中的新增功能 | Microsoft Learn C# 13 包括以下新增功能。 可以使用最新的 Visual Studio 2022 版本或 .NET 9 SDK 嘗試這些功能&#xff1a;Introduced in Visual Studio 2022 Version 17.12 and newer when using C# 13 C# 13 中的新增功能 | Micr…

numpy.ma.masked_where:屏蔽滿足條件的數組

1.函數功能 屏蔽滿足條件的數組內容&#xff0c;返回值為掩碼數組 2.語法結構 np.ma.masked_where(condition, a, copyTrue)3. 參數 參數含義condition屏蔽條件a要操作的數組copy布爾值&#xff0c;取值為True時&#xff0c;結果復制數組(原始數據不變)&#xff0c;否則返回…