> 机器学习领域最通用的语言,要会。
> [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)