程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python】python基礎語法

編輯:Python

【Python】python基礎語法.md

C位打多了, 你就知道~老抗壓怪了~---凱凱不哭~凱凱堅強

我直接寫完語法集合,

然後補一些python語法點~就開第三方庫~~這樣有意思些

哪怕復習一遍學術名詞拼寫,也有意義.


Python 一些注意點

關於語句的最後分號加不加

  • 我看了分號是可加可不加的, 加了不報錯, 雖然大多數情況下玩python都不加 習慣了某語言只是玩一玩python沒必要改自己習慣, 找個 格式化工具 即可~
  • Python 是縮進嚴格的語言~ 一定注意不要隨意空格 tab
    • 報錯 unexpected indent
  • 使用#表示注釋~ 一般#後面跟個空格~ (規范嘛)

字面量literal 變量variable

其實直接理解字面量不好理解~我是反過來理解的

  • 字面量就是可以賦值給變量的值~
    • 數值 1 , 2,3,4
    • 字符串"1" "2"
    • ...

python變量不需要聲明

  • 直接使用即可
  • 但是不可以不能使用沒有賦值的變量,會報錯沒有defined
  • python和js一樣是動態語言,可以賦任何類型的值~,也可以任意修改!

標識符identifier

所有的可以自主命名---函數名, 類名, 變量名都屬於標識符identifier

  • 標識符命名規范
    • 可以含有字母數字下劃線
      • 沒有美元符號哦,js有
    • 數字不能開頭
    • 關鍵詞保留字不能用~
  • 命名方式
    • 下劃線命名 underscore case max_number
    • 短橫槓 實際翻譯應該是"羊肉串命名法" kabob case max-number
    • 小駝峰 Lower Camel Case maxNumber
    • 大駝峰 Upper Camel Case 也叫Pascal Case MaxNumber

數據類型

變量值的類型~也就是字面量的種類~

數值: 整數, 浮點數(小數), 復數

  • 在Python 中所有的整數都是int 類型
image-20220625205827216
  • python中整數的大小沒有限制,可以是無限大的整數
    • 如果數字太大可以用下劃線作為分隔符
c = 123_456_789 # 下劃線位置隨便添加
  • ​ 輸入的內容無法識別會報 invalid token

  • 其他進制的數字(不咋用了解下)

    • 0b開頭是十進制
      • 0b10
    • 0o開頭是八進制
      • 0o10
    • 0x開頭是十六進制
      • 0x10
  • 語句和表達式

    • 表達式不會產生實質性結果,就類似半句話
    • 語句就是一個完整的句子了~
      • c+3 輸出c 是沒變化的
      • c = c+3 就是語句
      • 那麼c++是語句還是表達式~ 是語句
  • 浮點數(小數), 在Python中所有的小數都是float類型

  • 對浮點數進行運算時, 可能會得到一個不精確的結果(很有意思哦)

a1 = 0.1
a2 = 0.2
print(a1+a2)  # 0.30000000000000004
#### 字符串

文本信息吧~字符串就是用來表示'文本信息'的

要用引號包裹

-   雙引號內還需要使用引號要用單引號---` 相同引號不能相鄰嵌套`

```python
a1 = '鋤禾日當午,\
汗滴禾下土,\
誰知盤中餐,\
粒粒皆辛苦,\
'
print(a1)  # 結果一行
a2 = '''鋤禾日當午,\
汗滴禾下土,\
誰知盤中餐,\
粒粒皆辛苦,\
'''
print(a2)  # 不分行
a3 = '''鋤禾日當午,
汗滴禾下土,
誰知盤中餐,
粒粒皆辛苦,
'''
print(a3)  # 分行

通過上面內容可以發現, 這個反斜槓的作用類似一個"軟換行"

就是告訴解釋器, 後面的換行不要當做換行/內容連接起來

實際上叫做 續行符~ 也是一種轉義字符

  • 轉義字符
轉義字符描述\(處於行尾位置)續行符\反斜槓’單引號"雙引號\b退格\n換行\v縱向制表符\t橫向制表符\r回車\f換頁

確實有一些做網頁不方便~因為不是必然的單一為網頁而生~比如格式保留. 需要不停地寫轉義符

C在這方面更離譜

寫一個有意思的 \u0040可以顯示一個@符號

\u之後跟unicode編碼 4位

沒啥用...編輯器出不來結果 你敢直接用在浏覽器?

字符串運算

intro = '你好'
name = 'Shinkai'
# 同字符串類型可以相加
print(intro + name)  # 你好Shinkai
# 下面這種寫法在python中並不常見
print(intro + name + "!!!!!")  # 你好Shinkai!!!!!
# 一般寫成這樣子
print(intro+name, "!!!!!")  # 你好Shinkai !!!!!

占位符

str = 'hello %s' % '孫悟空' # %s 是 string的簡寫
print(str)  # hello 孫悟空
str1 = 'hello %s 你好 %s' % ('monkey', '孫悟空')
print(str1)  # hello monkey 你好 孫悟空
str2 = 'hello %3s' % 'ab'  # 字符串長度最少3
print(str2)  # hello  ab
str3 = 'hello %3.5s' % 'abcdef'  # 字符串長度在3-5
print(str3)  # hello abcde

%f 是浮點數占位符

%d 是整數占位符, 只是捨去小數部分

只是使用不用這麼細~我就是學的時候知道一下~

通用寫法

res = 'res'
print('res = %s' % res)  # res = res

格式化字符串(更優寫法類似js)

intro = 'hello'
name = 'Shinkai'
res = f'{intro} {name}'
print(res)  # hello Shinkai

想玩的花的自己看報錯好吧.. 不模擬所有情況了

總結一下字符串拼接方式4種(實際兩種)

  1. 字符串運算
  2. 字符串參數
  3. 字符串占位符
  4. 字符串格式化

字符串復制

python獨有的,字符串*n會將字符串重復n次返回

name = 'Shinkai' * 2
print('hello ' + name)  # hello ShinkaiShinkai
print('hello', name)
print('hello %s ' % name)
print(f'hello {name} ')

布爾值bool

邏輯判斷

布爾值實際也是整型, True是1, False是0

print(1 + True)  # 2
print(1 + False)  # 1
print(1 * False)  # 0

None(不咋用)

None表示不存在 別跟null搞混了不存在null類型但是有None類型

類型檢查

目前提到的內容above, 有字符串, 數值,空值

數值包含: 整型(包含布爾), 浮點, 復數

為什麼要類型檢查

str = '123'
num = 123
print(str)  # 123
print(num)  # 123

可以看到 不同類型的內容 打印出來都是123 不知道類型~

實際上pycharm指針放變量上面就顯示了~

print(type(num))  # <class 'str'>
print(type(str))  # <class 'int'>

所有類型檢查

# 類型檢查
print(type('123'))  # <class 'str'>
print(type(123))  # <class 'int'>
print(type(123.123))  # <class 'float'>
print(type(True))  # <class 'bool'>
print(type(None))  # <class 'NoneType'>

python是面向對象的語言~

說白了現在的都是面向對象,面向對象只要有語法包含聲明式表達就叫面向對象.....

Python 是面向對象的語言

  • 一切皆對象
image-20220626130532146

重學還能學到好多東西~ 這是操作系統的內容

調度算法~雖然咱不用~但是備一個影響不大

這塊區別有一個靜態數據區 靜態變量是放在這裡的.

什麼是對象

這裡不寫~ 內容太多了....

對象的結構

每個對象都會存一個id, type, value

我們下載的官方版本的python,也就是沒有前綴的python解釋器~因此就是Cpython, Cpython的id就是變量存儲的內存地址

  • id是唯一標識符
  • type是類型
    • 決定了變量擁有哪些功能(方法)
  • value就是值
    • 對象分為可變對象和不可變對象
      • 可變對象的值可以變,
# 對象結構
name = 'Shinkai'
print(id(name))  # 4313468016, 4443786352
print(type(name))  # <class 'str'>
print(name)  # Shinkai

python是強類型的, 類型一旦創建,不能修改

對象和變量

對象實際上沒有直接存在變量中, 實際上存儲的是對象在內存中的地址

image-20220626132252654
test = 123
test2 = test
test3 = 123
print(test == test2)  # True
print(test == test3)  # True

# 這樣寫也是相同的

test = {"key": "value"}
test2 = test
test3 = {"key": "value"}
print(test == test2)  # True
print(test == test3)  # True
image-20220626133438697

類型轉換int(),float(),bool(),str()

Python是強類型, 不可以對原來已經聲明的變量產生影響,並且不可以隱式轉換~但是可以強行轉換後把內容賦值給原來的變量~

變量是可以無限次賦值的~

解釋一下就是比如int(a), 實際上是吧 a的類型改成int 然後把其他內容復制,然後把這個地址給a.

整型轉換,int()

  • 布爾值
    • Ture -> 1 Flase ->0
  • 字符串
    • 合法的數字字符串可以轉換成整型
    • 不合法的會報錯
  • 浮點數
    • 直接取整
  • None 報錯

浮點轉換, float()

類似int(),但是是小數形式

字符串轉換, str()

Ture->'True'

False->'False'

123->'123'

...

a=True

轉布爾,bool()

0,None,''空字符串都是False

運算符

分類

  • 算數運算符Arithmetic operator
  • 賦值運算符assignment operator
  • 比較運算符(關系運算符)relational operator
  • 邏輯運算符 logical operator
  • 條件運算符(三元運算符)ternary operator

算數運算符Arithmetic operator

# +加法運算符(如果是兩個字符串之間進行加法運算,則會進行拼串操作)
# -減法運算符
# *乘法運算符(如果將字符串和數字相乘,則會對字符串進行復制操作,將字符串重復指定次數)
# / 除法運算符,運算時結果總會返回一個浮點類型
# //整除,只會保留計算後的整數位
# ** 冪運算
# % 模余運算 結果是余數

賦值運算符assignment operator

=就是簡單的右側值賦給左側

  • a+=a -> a = a+a
  • -=
  • *=
  • /=
  • //=
  • **=
  • %=

關系運算符relational operator

  • >=
  • <=
  • >
  • <
  • ==
  • !=

有一個有意思的點 字符串的大小比較

print('2'>'11') # true

實際上字符串比較比較的是unicode編碼~ 每一位的unicode. 第一位大於就是true

js一樣

可以推測出

'a'>'b' # false
'ab' > 'b' # false

沒啥用就是有意思.

邏輯運算符 logical operator

邏輯非 not

邏輯與 and

邏輯或 or

一樣有短路操作~

  • 邏輯與 只要第一個是false 那麼結果就是false不會執行後面,第一個true,執行後面
  • 邏輯或 只要第一個是true 那麼結果就是true 不會執行後面,第一個false, 執行後面
False and print(a)  # 不打印
True and print(a)  # 打印
False or print(a)  # 打印
True or print(a)  # 不打印

非布爾值邏輯運算

把每個值轉換為布爾值運算

res = 1 and 2 # 第一個為true,返回第二個
res = 1 and 0 
res =  0 and 1 # 第一個為false 短路 直接返回false

or一樣~

條件運算符

語法: 語句1 if 表達式 else 語句2

print('1') if True else print('2')

一般這樣用

max = a if a > b else b

就是max是ab中大的一個數

運算符優先級

自己先建議加括號

做題看優先級表格, 太離譜的別理他 怼他,你看不懂都可以diss他

語句

條件判斷語句 (if語句)Conditional statement

  • if 條件表達式:語句
  • 只執行一個語句的時候可以在 : 後面跟一個語句
  • 如果多個語句就得開啟一個 代碼塊
  • python的代碼塊是有縮進決定的~重啟一行即可不需要花括號
a = 2
if a == 1:
    print('1')
    print('2')
print('3') # 3

input() 函數可以暫時阻止程序結束~輸入隨機字符後結束~

if- elif -else

幾個小練習

# # 偶數奇數判斷
# num = int(input('隨便輸入一個數'))
# print('偶數' if num % 2 == 0 else '奇數')

# # 閏年判斷
# year = int(input('隨便輸入一個年份'))
# print('閏年' if ((year % 100 != 0 and year % 4 == 0) or (year % 100 == 0))else '非閏年')

# # 狗子相當於人年齡判斷
# dog_age = int(input('請輸入你家狗年齡'))
# if dog_age <= 0:
#     print('騙誰呢')
# elif dog_age <= 2:
#     person_age = dog_age * 10.5
#     print(f'狗的年齡相當於人的{person_age}')
# else:
#     person_age = (dog_age - 2) * 4 + 21
#     print(f'狗的年齡相當於人的{person_age}')

# 根據得分, 給獎勵
# score = int(input('請輸入你的得分'))
# if score == 100:
#     print('niubi666')
# elif 80 <= score <= 99:
#     print('還行')
# elif 60 <= score <= 79:
#     print('屁股開花')
# else:
#     print('no 獎勵')
# print(bool(0))
# print(bool('0'))

# 嫁不嫁判斷~
# question1 = bool(input('1為是,不填為否, 有房?'))
# question2 = bool(input('1為是,不填為否, 有車?'))
# question3 = bool(input('1為是,不填為否, 帥麼?'))
# if question1 or question2 or question3:
#     if question1 and question2 and question3:
#         print('嫁了嫁了')
#     else:
#         print('湊活一下也能過')
# else:
#     print('你是來搞笑的吧')

所有的代碼

# a1 = '鋤禾日當午,\
# 汗滴禾下土,\
# 誰知盤中餐,\
# 粒粒皆辛苦,\
# '
# print(a1)  # 結果一行
# a2 = '''鋤禾日當午,\
# 汗滴禾下土,\
# 誰知盤中餐,\
# 粒粒皆辛苦,\
# '''
# print(a2)  # 不分行
# a3 = '''鋤禾日當午,
# 汗滴禾下土,
# 誰知盤中餐,
# 粒粒皆辛苦,
# '''
# print(a3)  # 分行
# intro = '你好'
# name = 'Shinkai'
# # 同字符串類型可以相加
# print(intro + name)  # 你好Shinkai
# # 下面這種寫法在python中並不常見
# print(intro + name + "!!!!!")  # 你好Shinkai!!!!!
# # 一般寫成這樣子
# print(intro+name, "!!!!!")  # 你好Shinkai !!!!!
# str = 'hello %s' % '孫悟空' # %s 是 string的簡寫
# print(str)  # hello 孫悟空
# str1 = 'hello %s 你好 %s' % ('monkey', '孫悟空')
# print(str1)  # hello monkey 你好 孫悟空
# str2 = 'hello %3s' % 'ab'  # 字符串長度最少3
# print(str2)  # hello  ab
# str3 = 'hello %3.5s' % 'abcdef'  # 字符串長度在3-5
# print(str3)  # hello abcde
# res = 'res'
# print('res = %s' % res)  # res = res
# # 更優的寫法
# intro = 'hello'
# name = 'Shinkai'
# res = f'{intro} {name}'
# print(res)  # hello Shinkai
# assignment
# name = 'Shinkai' * 2
# print('hello ' + name)  # hello ShinkaiShinkai
# print('hello', name)
# print('hello %s ' % name)
# print(f'hello {name} ')
# print(1 + True)  # 2
# print(1 + False)  # 1
# print(1 * False)  # 0

# str = '123'
# num = 123
# print(str)  # 123
# print(num)  # 123
# print(type(num))  # <class 'str'>
# print(type(str))  # <class 'int'>

# # 類型檢查
# print(type('123'))  # <class 'str'>
# print(type(123))  # <class 'int'>
# print(type(123.123))  # <class 'float'>
# print(type(True))  # <class 'bool'>
# print(type(None))  # <class 'NoneType'>

# # 對象結構
# name = 'Shinkai'
# print(id(name))  # 4313468016, 4443786352
# print(type(name))  # <class 'str'>
# print(name)  # Shinkai

# test = {"key": "value"}
# test2 = test
# test3 = {"key": "value"}
# print(test == test2)  # True
# print(test == test3)  # True

# # 類型轉換
# a = True
# a = int(a)
# print(a)

# a = 2**2
# print(a)

# obj1 = {'a': 123}
# obj2 = {'a': 123}
# print(obj1 is obj2)
# a = 0
# a = not a
# print(a)
# a = 0
# False and print(a)  # 不打印
# True and print(a)  # 打印
# False or print(a)  # 打印
# True or print(a)  # 不打印
# print('1') if True else print('2')
# if 1 == 1:
#     print('1')
#     print('1')
# a = 2
# if a == 1:
#     print('1')
#     print('2')
# print('3')
# a = input('請輸入1-100一個數字')
# if a == '123':
#     print('回答正確')
# else:
#     print('回答錯誤, 你的答案是', a)
# age = int(input('請輸入你的年齡:'))
# if age > 18:
#     print('你已經成年')
# elif age > 10:
#     print('你上小學了')
# elif age <= 3:
#     print('你還是小孩')
# else:
#     print('奇怪的年齡')

# # 偶數奇數判斷
# num = int(input('隨便輸入一個數'))
# print('偶數' if num % 2 == 0 else '奇數')
# # 閏年判斷
# year = int(input('隨便輸入一個年份'))
# print('閏年' if ((year % 100 != 0 and year % 4 == 0) or (year % 100 == 0))else '非閏年')

# dog_age = int(input('請輸入你家狗年齡'))
# if dog_age <= 0:
#     print('騙誰呢')
# elif dog_age <= 2:
#     person_age = dog_age * 10.5
#     print(f'狗的年齡相當於人的{person_age}')
# else:
#     person_age = (dog_age - 2) * 4 + 21
#     print(f'狗的年齡相當於人的{person_age}')
# score = int(input('請輸入你的得分'))
# if score == 100:
#     print('niubi666')
# elif 80 <= score <= 99:
#     print('還行')
# elif 60 <= score <= 79:
#     print('屁股開花')
# else:
#     print('no 獎勵')
# print(bool(0))
# print(bool('0'))
# question1 = bool(input('1為是,不填為否, 有房?'))
# question2 = bool(input('1為是,不填為否, 有車?'))
# question3 = bool(input('1為是,不填為否, 帥麼?'))
# if question1 or question2 or question3:
#     if question1 and question2 and question3:
#         print('嫁了嫁了')
#     else:
#         print('湊活一下也能過')
# else:
#     print('你是來搞笑的吧')

快捷鍵記錄

command + / 注釋

shift+回車 光標跳轉到下一行開頭

option+command + L 格式化代碼

shift+command+上下 可以上下移動當前行所有內容

和JavaScript的不同點

  • 縮進代表不同層級代碼塊
  • 不同類型不能計算
  • 可以使用\區分不同行, 多行內容用''' '''triple quotation mark
    • js用反引號backquote
  • python字符串可以*數字(語法糖)
  • python的boolean是True, False lowercase是錯誤的
    • js的boolean 是ture, false uppercase是錯誤的
  • python的變量是沒有類型的,變量的類型是賦值的值的類型

好多區別....js把能捨的都捨了

js根本沒有'靜態資源區域'或者說靜態資源被存在棧裡.看理解吧沒人問的

  • python是強類型的, 類型一旦創建,不能修改
    • js弱類型,而且還有隱式轉換~.離譜

js不能打印 內存地址, 這個比較麻煩只能通過雙等和三等判斷

js偏底層的api很多都沒有拋出來

  • python沒有三等

    • 不比較地址~畢竟可以看內存地址~

    • js對象內容一樣,但是內存地址不一樣比較會顯示false

      • js中==兩個對象實際上比較內存地址~so不可能相同除非指向同一個

      • python用 is 和 is not來比較 內存地址也就是id 類似js===

      • 可以用來比較是否是同一個對象

  • python不區分引用數據類型和基本數據類型,區分的是可變不可變數據類型

  • python不合法字符串轉數值,會報錯 js不報錯有個NaN類型~

  • python多一個整除運算// 以及乘以字符串~

    • js也有**冪運算
  • python和js一樣有短路操作

    • 但是邏輯運算符長得不一樣 not->! or->|| and-> &&
  • python可以鏈式比較 1<score<100

    • js不行,運算結果是錯誤的
  • js的'0'轉布爾是false js隱式轉換傾向於數值 '0'為0 0是false

  • python的'0'轉布爾是true.


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved