> 機器學習領域最通用的語言,要會。
> [The Python Tutorial](https://docs.python.org/3/tutorial/index.html)
> 有其他語言的編程基礎,本課學習時長評估:兩天。
[TOC]
## 重點關注的章節
* 4. More Control Flow Tool
* 5. Data Structures
* 6. Modules
* 9. Classes
其他章節概覽即可,不要花太多時間深入研究。
基礎類庫中的大多數類并不會用,更大可能是用第三方封裝的更強大易用的類庫。
## 對這門語言的理解
1. 弱類型語言,比如變量可以賦值多種類型;函數返回可以是多種類型;沒有重載;變量不用預先聲明,賦值即聲明;當然不聲明直接參與計算,也是不可以的,比如x+=1,NameError: name 'x' is not defined。
2. 代碼組織結構:package(文件夾) --> module(文件) --> (class/function/variable);包和文件夾是有區別的:\_\_init__.py;for/while循環語句,也可以有else statement。
3. module是這個語言的邏輯核心,一個module可以放置class、function、variable,也可以作為作為腳本運行的入口。
4. import xx,from xx import xx,from xx import *
5. 運算符,/結果是浮點,%取模,//取整,**冪運算;字符串:單引號,雙引號是一樣的,三個引號可以包含特殊字符。
6. 容器類數據結構:列表(list)、元組(tuple)、集合(set)、字典(dict);這種容器類的操作知識點很多,indexing/slicing,比如:s\[0:4\],左閉右開,含左不含右,可以用s[:-1],代表去掉最后一個,慢慢用熟就好了。
7. 參數的知識點很多:positional arguments、keyword arguments、*args、**args、函數定義中的特別函數,如下:
~~~
def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
----------- ---------- ----------
| | |
| Positional or keyword |
| - Keyword only
-- Positional only
~~~
8. 理解Class and Instance Variables
9. 理解符號表:More precisely, all variable assignments in a function store the value in the local symbol table; whereas variable references first look in the local symbol table, then in the local symbol tables of enclosing functions, then in the global symbol table, and finally in the table of built-in names
10. 理解變量作用域、global、nonlocal
~~~
def scope_test():
def do_local():
spam = "local spam" # 此函數定義了另外的一個spam字符串變量,并且生命周期只在此函數內。此處的spam和外層的spam是兩個變量.
# 如果寫出spam = spam + “local spam” 會報錯:name 'sparm' is not defined
def do_nonlocal():
nonlocal spam
spam = "nonlocal spam" # 使用外層的spam
print("do_nonlocal", id(spam)) # ID_do_nonlocal
def do_global():
global spam
spam = "global spam" # spam為全局變量,在模塊中定義的變量默認自動為全局變量
print("do_global", id(spam)) # ID_do_global
spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam, id(spam)) # ID_do_nonlocal
do_global()
print("After global assignment:", spam, id(spam))
scope_test()
print("In global scope:", spam, id(spam)) # ID_do_global
~~~
## IDE工具:PyCharm
[https://zhuanlan.zhihu.com/p/74294603](https://zhuanlan.zhihu.com/p/74294603)