1. Python在Ubuntu下面下载Python
2. 安装依赖包
sudo apt-get update
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev
3. 把Python3.7 安装到/usr/local 目录
mkdir tmp
tar xpvf python3.7.0.tar.xz -C ./tmp
cd /temp/python3.7.0/./configure -- prefix=/usr/local
make
make altinstall
4. 更改.usr/bin/python连接
ln -s/usr/local/bin/python3.7 /usr/bin/python37
ln -s/usr/local/bin/pip3.7 /usr/bin/pip37
5. python中一切皆对象。
Python比其他编程语言的面向对象更加彻底。class也是对象,函数也是对象(Java当中不是),python语言的动态性非常强。是现在面向对象语言中更加彻底的OOP编程语言。类和函数也是对象,属于python的一等公民。类可以理解成一个模板,模板也是一个对象,模板对象。类是一个对象,是可以动态修改这个属性的。
赋值给一个变量;可以添加到集合对象中;可以作为参数传递给函数;可以当做函数的返回值去执行这个返回的函数。
def ask(name="bobby"): print(name)class Person: def __iter__(self): print("bobby1")def print_type(item): print(type(item))def decorator_func(): print("dec start") return ask # 返回ask函数去执行这个函数,这个不是函数的嵌套,是函数的返回。基于装饰器实现的一种原理。# my_ask = decorator_func()# my_ask("tom")# obj_list = []# obj_list.append(ask)# obj_list.append(Person)# for item in obj_list:# print(item())# my_func = ask# my_func("bobby")# my_class = Person# my_class()
最难理解的是第四条,return 函数名,就是返回一个函数调用。
返回即执行!
def decorator_func(): print("dec start")my_ask = decorator_func() #dec startmy_ask # Noneprint(my_ask) # dec startmy_ask1 = decorator_funcmy_ask1() # dec startprint(my_ask1()) # None
如果一个函数或者是一个类,不想直接执行()不用打,如果想立马执行要打上()
调用即执行!
6. 函数或者类返回的难点:
def funcZero(): print("this funcZero")def func(): print("this func") return funcZerof = func() # 调用即执行print(f) # 返回funcZero内存位置
this func
<function funcZero at 0x0000014F0DD0C1E0>
我们发现调用即执行了func函数,第二部分打印了funcZero函数的的内存位置(返回即执行)
def funcZero(): print("this funcZero")def func(): print("this func") return funcZerof = func()print(f())# this func# this funcZero# None
再次加入括号,发现funzero也执行了
总结:return = 调用即执行,调用即执行=函数在return后展开。
其实上面的代码就是等于
def funcZero(): print("this funcZero")def func(): print("this func") return funcZero # funcZero函在这类展开! # def funcZero(): # print("this funcZero")
总结:
* 如果我们就一个函数
def func(): print("this func")
直接写函数不打括号
def func(): print("this func")func # 不显式内容print(func) #
不显式内容,print显式函数的地址
*如果我们写上括号
def func(): print("this func")func() # this funcprint(func()) # this func# None
如果我们不写返回值返回为空,写上括号,直接执行函数
* 如果我们构造一个对象
def func(): print("this func")f = func() # this funcprint(f) # None
执行相同,返回值为空。
* 如果不写返回值,返回值为空
def func(): print("this func") return Nonef = func() # this funcprint(f) # None
* 如果返回一个函数,且两个函数都有参数。函数执行第一遍实质性函数体内,执行第二遍是执行返回的函数,可以给予传参。
def funcBack(name): print("this funcBack {}".format(name))def func(name): print("this func {}".format(name)) return funcBackf = func("thomas")f("Jerry")
# this func thomas # this funcBack Jerry
这个观点很重要!
打印执行过程
def funcBack(name): print(1) print("this funcBack {}".format(name)) print(2)def func(name): print(3) print("this func {}".format(name)) print(4) return funcBackf = func("thomas")f("Jerry")# this func thomas# this funcBack Jerry
* 但是函数调用类是不行
class func1: def __iter__(self,name): self.name = name print("Jerry")def func(name): print(3) print("this func {}".format(name)) print(4) return func1f = func("thomas")f("Jerry")
Traceback (most recent call last):
File "F:/QUANT/练习/chapter01/all_is_object.py", line 13, in <module>3 f("Jerry")TypeError: func1() takes no argumentsthis func thomas4