zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    C#如何调用非托管的C++Dll
    CList 点击表头排序 (3)两种排序的第二种
    CList 点击表头排序 (2)两种排序方法中其中一种
    CList 点击表头排序 (1)SortItems函数
    CListCtrl 隔行变色
    C++去掉字符串中首尾空格和所有空格
    Dialog和FormView如何派生通用类
    STL中erase()的陷阱
    socket 笔记(一)
    prettyJson V7.1 使用
  • 原文地址:https://www.cnblogs.com/noah0532/p/10964342.html
Copyright © 2011-2022 走看看