Python说文解字_杂谈01

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 start
my_ask  # None
print(my_ask) # dec start

my_ask1 = decorator_func
my_ask1() # dec start
print(my_ask1()) # None

  如果一个函数或者是一个类,不想直接执行()不用打,如果想立马执行要打上()

  调用即执行!

 

6. 函数或者类返回的难点:

def funcZero():
    print("this funcZero")

def func():
    print("this func")
    return funcZero

f = func()  # 调用即执行
print(f) # 返回funcZero内存位置

this func
<function funcZero at 0x0000014F0DD0C1E0>

 

 

  我们发现调用即执行了func函数,第二部分打印了funcZero函数的的内存位置(返回即执行)

def funcZero():
    print("this funcZero")

def func():
    print("this func")
    return funcZero

f = 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) # <function func at 0x000002B46100C1E0>

 

  不显式内容,print显式函数的地址

 

  *如果我们写上括号

def func():
    print("this func")

func()  # this func
print(func()) # this func
# None

  如果我们不写返回值返回为空,写上括号,直接执行函数

 

  * 如果我们构造一个对象

def func():
    print("this func")

f = func()  # this func
print(f) # None

 

  执行相同,返回值为空。

 

  * 如果不写返回值,返回值为空

def func():
    print("this func")
    return None

f = func()  # this func
print(f) # None

 

  

  * 如果返回一个函数,且两个函数都有参数。函数执行第一遍实质性函数体内,执行第二遍是执行返回的函数,可以给予传参。

def funcBack(name):
    print("this funcBack {}".format(name))

def func(name):
    print("this func {}".format(name))
    return funcBack

f = 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 funcBack

f = 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 func1

f = 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 arguments
this func thomas
4

 

 

posted @ 2019-06-02 20:59  时海涛|Thomas  阅读(165)  评论(0编辑  收藏  举报