Python學習筆記:Python語言基礎


Python對象和引用

Python對象概述

計算機程序通常用於處理各種類型的數據(即對象),不同的數據屬於不同的數據類型,支持不停的運算操作。

在Python語言中,數據表示對象,對象本質上是一個內存塊,擁有特定的值,支持特定類型的運算操作。Python3中一切皆對象每個對象由標識符(identity)、類型(type)、和值(value)標識

  1. 標識用於唯一標識一個對象,通常對應於對象在計算機中的位置。使用內置函數id()可以返回對象的標識
  2. 類型用於表示對象所屬的數據類型(類),用於限定對象的取值範圍,以及允許執行的處理操作。使用內置函數type()可以返回對象所屬的數據類型
  3. 值用於表示對象的數據類型的值。使用內置函數print()可以返回對象的值
>>> id(123)
2031222608
>>> type(123)
<class 'int'>
>>> print(123)
123
>>> type(abs)
<class 'builtin_function_or_method'>
>>> id(abs)
14545776
>>> type(range)
<class 'type'>
>>> id(range)
2031134744
>>>

Python是動態類型語言

Python屬於動態類型語言,即變量不需要顯式聲明數據類型。根據變量的賦值,Python解釋器會自動確定其數據類型,事實上,變量僅用於指向某個類型對象,故變量不可以限定類型,即可以指向任何類型對象。通過標識符和賦值運算符(=),可以指定某個變量指向某個對象,即用該對象。多個變量可以引用同一個對象,一個變量也可以改變指向其他對象。

Python是強類型語言

Python是一種強類型語言,即每個變量指向的對象均屬於某個數據類型,即只支持該類型允許的運算操作。

>>> a=7
>>> b='7'
>>> a+b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> b=7
>>> a+b
14
>>>

對象內存

Python程序運行時,在內存中會創建各種對象(位於堆內存中),通過賦值語句,可以將對象綁定到變量(位於棧內存),從而通過變量引用對象,進行各種操作

多個變量可以引用同一個對象,如果一個對象不再被任何有效作用域中的變量引用,則會通過自動垃圾回收機制,回收該對象佔用的內存。

對象的值比較(==)和引用判別(is)

通過==運算符可以判斷兩個變量指向的對象的值是否相等;通過is運算符可以判斷兩個變量是否指向同一對象

>>> name='m0c1nu7'
>>> id=name
>>>
>>>
>>> name='mochu'
>>> id=name
>>> nickname='m0c1nu7'
>>> name==id
True
>>> name is id
True
>>> name==nickname
False
>>> name is nickname
False
>>>

不可變對象(immutable)和可變對象(mutable)

Python3對象可分爲不可變對象(immutable)和可變對象(mutable),不可變對象一旦創建,其值就不能被修改;可變對象的值可以修改。Python對象的可變性取決於其數據類型的設計,即是否允許改變其值。

Python3 中有六個標準的數據類型:

  1. Number(數字)
  2. String(字符串)
  3. List(列表)
  4. Tuple(元組)
  5. Set(集合)
  6. Dictionary(字典)

Python3 的六個標準數據類型中:
不可變數據(3 個):Number(數字)、String(字符串)、Tuple(元組);
可變數據(3 個):List(列表)、Dictionary(字典)、Set(集合)。

標識符及其命名規則

在Python語言中,包、模塊、類、函數、變量等的名稱必須爲有效標識符

標識符

標識符是變量、函數、類、模塊和其他對象的名稱。有效標識符的第一個字必須是字母或者下劃線,其後的字符可以是字母、數字、或下劃線。

注意:

  1. Python標識符區分大小寫
  2. 保留關鍵字不能作爲標識符
  3. 以雙下劃線開始或結束的名稱通常具有特殊含義,一般避免使用
  4. Python預定義標識符不能作爲自定義標識符

保留關鍵字

關鍵字即預定義保留標識符。關鍵字具有特殊的語法含義

>>> help()

Welcome to Python 3.8's help utility!

If this is your first time using Python, you should definitely check out
the tutorial on the Internet at https://docs.python.org/3.8/tutorial/.

Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules.  To quit this help utility and
return to the interpreter, just type "quit".

To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics".  Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".

help> keywords

Here is a list of the Python keywords.  Enter any keyword to get more help.

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

help> yield
The "yield" statement
*********************

   yield_stmt ::= yield_expression

A "yield" statement is semantically equivalent to a yield expression.
The yield statement can be used to omit the parentheses that would
otherwise be required in the equivalent yield expression statement.
For example, the yield statements

   yield <expr>
   yield from <expr>

are equivalent to the yield expression statements

   (yield <expr>)
   (yield from <expr>)

Yield expressions and statements are only used when defining a
*generator* function, and are only used in the body of the generator
function.  Using yield in a function definition is sufficient to cause
that definition to create a generator function instead of a normal
function.

For full details of "yield" semantics, refer to the Yield expressions
section.

help> quit

You are now leaving help and returning to the Python interpreter.
If you want to ask for help on a particular object directly from the
interpreter, you can type "help(object)".  Executing "help('string')"
has the same effect as typing a particular string at the help> prompt.
>>> 

Python預定義標識符

Python語言包含許多預定義內置類、異常函數等。用戶應該避免使用Python預定義標識符作爲自定義標識符名
使用Python內置函數dir(__builtins__)可以查看所有內置的函數名、異常名等

>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
>>>

命名規則

在這裏插入圖片描述

變量和賦值語句

對象引用即指向具體對象實例的標識符,也稱之爲“變量”

變量的聲明和賦值

變量的聲明和賦值用於把一個變量綁定到某個對象
變量名 = 字面量或表達式
最簡單的表達式是字面量,Python基於字面量的值創建一個對象,並綁定到變量;對於複雜的表達式,Python先求值表達式,然後返回表達式結果對象,並綁定到變量,Python變量被訪問之前必須要被初始化,即賦值(綁定到某個對象);否則會報錯

鏈式賦值語句

變量1 = 變量2 = 表達式
等價於:變量2 = 表達式,變量1 = 變量2
鏈式賦值用於爲多個變量賦同一個值

複合賦值語句

複合不僅可以簡化程序代碼,使程序更加精煉,還可以提高程序效率

在這裏插入圖片描述

刪除變量

可以使用del語句刪除不再使用的變量

>>> name='mochu'
>>> del name
>>> print(name)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'name' is not defined
>>>  

系列解包賦值

Python支持系列數據類型解包爲對應相同個數的變量

>>> a,b=1,2
>>> a
1
>>> b
2
>>> a,b=(3,4)
>>> a
3
>>> b
4
>>> 

另外,在Python中可以使用,a,b=b,a這樣的方式實現兩個變量的值的交換

>>> name='mochu'
>>> id='m0c1nu7'
>>>
>>> name
'mochu'
>>> id
'm0c1nu7'
>>>
>>> name,id=id,name
>>>
>>> name
'm0c1nu7'
>>> id
'mochu'
>>>  

常量

Python語言不支持常量,即沒有語法規則改變一個常量的值。Python語言使用約定,聲明在程序中不會改變的變量爲常量,通常使用全大寫字母(可以使用下劃線增加可閱讀性)表示常量名

表達式和運算符

表達式的組成

表達式是可以計算的代碼片段,由操作數和運算符構成。操作數、運算符和圓括號按一定規則組成。表達式通過運算後產生運算結果,返回結果對象。運算結果對象的類型由操作數和運算符共同決定

書寫表達式的規則

  1. 表達式從左到右在同一個基準上書寫。例如,數學公式a2+b2應該寫爲:a**2+b**2。
  2. 乘號不能省略,例如,數學公式ab(表示a乘以b)應該寫爲:a*b。
  3. 括號必須成對出現,而且只能使用圓括號,圓括號可以嵌套使用

運算符概述

Python運算符用於在表達式對一個或多個操作數進行計算並返回結果值。接受一個操作數的運算符被稱作一元運算符,例如,正負號運算符+或—。接受兩個操作數的運算符被稱作二元運算符,例如,算術運算符+、—、*、/等

如果一個表達式中包含多個運算符,則計算順序取決於運算符的結合順序和優先級,使用圓括號可以強制改變運算順序

在這裏插入圖片描述
在這裏插入圖片描述

語句

語句是Python程序的過程構造模塊,用於定義函數、定義類、創建對象、變量賦值、調用函數、控制分支、創建循環等

Python語句的書寫規則

  1. 使用換行符分隔,一般情況下,一行一條語句。
  2. 從第一行開始,前面不能有任何空格,否則會產生語法錯誤。注意,註釋語句可以從任何位置開始;複合語句構造體必須縮進
  3. 反斜槓(\)用於一個代碼行跨越多行的情況。如果語句太長,可以使用續行符(\)。但三引號定義字符串、元組、列表、字典,可以放在多行,而不使用續行符(\),因爲它們可以清晰的表示定義的開始和結束
  4. 分號(;)用於在一行書寫多條語句

複合語句及其縮進書寫規則

由多行代碼組成的語句稱爲複合語句。複合語句(條件語句、循環語句、函數定義和類定義,例如 if、for、while、def、class等)由頭部語句和構造體語句塊組成的。構造體語句由一條或多條語句組成。複合語句和構造體語句塊的縮進書寫規則如下

  1. 頭部語句由相應的關鍵字(例如,if)開始,構造體語句塊則爲下一行開始的一行或多行縮進代碼
  2. 通常縮進是相對頭部語句縮進4個空格,也可以是任意空格,但同一構造體代碼塊的多條語句縮進的空格數必須一致對齊。如果語句不縮進或者縮進不一致,將導致編譯錯誤。注意:Python是強制縮進的語言,以保證源代碼的規範性和可讀性。另外,Python不建議使用製表符縮進,因爲製表符在不同系統產生的縮進效果不一樣
  3. 如果條件語句、循環語句、函數定義和類定義比較短,可以放在同一行。簡潔、高效纔是Python的風格

註釋語句

單行註釋以符號“#”開始,#.......

多行註釋用三個單引號 '''.......''' 或者三個雙引號 """.......""" 將註釋括起來

空語句pass

如果要表示一個空的代碼,可以使用pass語句。

>>> def hello():print('Hello!')
...
>>> hello()
Hello!
>>>
>>>
>>> def do_nothing():pass
...
>>> do_nothing()
>>>   

模塊和函數

Python語言包括許多內置函數,函數是具有一定功能的代碼塊,如print,max等,用戶也可以自定義函數。函數是可以重複調用的代碼塊。使用函數,可以有效地組織代碼,提高代碼的複用率。

函數的創建和調用

Python使用複合語句def創建函數對象。其語法格式如下:

def 函數名([形參列表]):#定義函數
	函數體

函數名([實參列表])#調用函數

聲明函數的時,可以聲明函數的參數,即形式參數,簡稱形參;調用函數時,需要提供函數需要的參數的值,即實際參數,簡稱實參
函數可以使用return返回值,無返回值的函數相當於其他編程語言中的過程。

內置函數

Python語言包含若干常用的內置函數,例如dir()、type()、id()、help()、len()等,可以直接使用

模塊函數

通過import語句,可以導入模塊module,然後使用module.function(arguments)的形式調用模塊中的函數,也可以通過from ... import ...的形式直接導入包中的常量、函數和類,或者通過from ... import *導入包中所有的元素,然後使用function(arguments)的形式直接調用模塊中的函數。

函數API

Python語言提供了海量的內置函數,標準函數,第三方模塊函數。函數的調用方法由應用程序編程接口(API)確定,常用函數的API如下圖所示:

在這裏插入圖片描述

類和對象

創建類對象

Python使用複合語句class創建對象,其語法格式如下:

class 類名:
	類體

類體中可以定義屬於類的屬性,方法

實例對象的創建和調用

基於類對象,可以創建其實例對象,然後訪問其方法或屬性。其語法格式如下:
Anobject=類名(參數列表)
Anobject=對象方法 或 Anobject.對象屬性

class Hello:#定義類
	myname='末初'#定義屬性
	def MyIntroduce(self,name1):#self是定義Hello類的MyIntroduce函數,name1是形參
		yourname=name1#交接一下name1,這一步也可以省略直接使用形參名
		print("Hello %s, My name is %s"%(yourname,Hello.myname))#輸出

name='楚末'#定義一個變量作爲實參
a=Hello()#創建對象
a.MyIntroduce(name)#調用對象方法,name是實參

運行結果

PS C:\Users\Administrator\Desktop\Test\py\py3> python .\test.py
Hello 楚末, My name is 末初

模塊和包

Python語言中,包含Python代碼的源文件(通常包含用戶自定義的變量、函數和類)稱爲模塊,其擴展名爲.py功能相近的模塊可以組成包,包是模塊的層次性組織結構

Python標準庫和第三方庫中提供了大量的模塊,通過import語句,可以導入模塊,並使用其定義的功能。導入和使用模塊功能的基本形式如下

import 模塊名   #導入模塊
模塊名.函數名    #使用包含模塊的全限定名稱調用模塊中的函數
模塊名.變量名    #使用包含模塊的全限定名稱訪問模塊中的變量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章