Python语法之进阶学习

python学习笔记:



#@Author:lieying
#@Function:Python进阶学习
#@Data: 2017-05-01至2017-05-02
#@Python:Python课程进阶学习
#--------内容------#
#1、函数式编程
#2、面向对象编程
#3、能够编写模块化的程序
#4、模块和包
#5、面向对象
#================================================================#
#map()
#reduce()
#filter()
#sorted()
#----------------------函数式编程------------------------#
#函数式不等于函数(最贴近计算)
#高阶函数(函数能够接收函数作为参数的函数)
def add(x,y,f):
    return (f(x)+f(y))
print(add(-4,5,abs))
#=-----------------map()函数-------------#
#python3中需要转换成list才可以,不能直接显示。
#map(函数,list)
def m(x):
    return x*x
print(list(map(m,[1,2,3,4,5,6,7,8])))
###-----------reduce函数----------#
#reduce函数接收的参数和map式类似,一个函数f一个list但是行为和map不同reduce传入的函数f必须是接收两个参数
from functools import reduce  #python3 里面将reduce放到了function里面
def f(x,y):
    return x+y
print(reduce(f,[1,3,5,7,9],100))
#---------filter函数--------------#
def is_odd(x):
    return x%2==1
print(list(filter(is_odd,[1,4,6,7,9,12,17])))
#-----------------sorted()函数--------#
#函数对list进行排序
print(sorted([1,20,30,23,14,15,6,7]))
#----------decorator函数装饰器--------#
#打印日志:@log
#检测性能:@performance
#数据库事务:@transaction
#URL路由:@post('/register')
#--------------------------------------#
def log(f):
    def fn(x):
        print("call "+f.__name__+"()......")
        return f(x)
    return fn
@log
def factorial(n):
    return reduce(lambda x,y:x*y,range(1,n+1) )
print(factorial(4))

#=========================模块和包========================#
#import引用其他的模块
#放入不同包中就能区分相同的模块
#包是文件夹,模块就是py文件,包可以有多级需要注意,每一个包下每一层都需要有一个__init__.py文件
import math
Math=math.pow(2,2)
print(Math)
#try except 是作用捕获错误,并在捕获到指定错误时执行except语句

#--------------------安装第三方模块--------------------------------#
#pip
#__init__函数,注意除了self以外的是参数
#注意一双下划綫开头的参数不能被外部访问
class Person:
    def __init__(self, name, lang, website):
        self.name = name
        self.lang = lang
        self.website = website
        self.email = "[email protected]"      #这个属性不是通过参数传入的

info = Person("qiwsir","python","qiwsir.github.io")
print("info.name=",info.name)
print("info.lang=",info.lang)
print("info.website=",info.website)
print("info.email=",info.email)               #info通过self建立实例,并导入实例属性数据

#python中定义实例方法。
# 请给 Person 类增加一个私有属性 __score,表示分数,
# 再增加一个实例方法 get_grade(),能根据 __score 的值分别返回 A-优秀, B-及格, C-不及格三档。
class Person(object):
    def __init__(self, name, score):
        self.__name = name
        self.__score = score

    def get_grade(self):
        if self.__score >= 80:
            return 'A'

        elif self.__score >= 60:

            return 'B'

        else:

            return 'C'

p1 = Person('Bob', 90)
p2 = Person('Alice', 65)
p3 = Person('Tim', 48)

print(p1.get_grade())
print(p2.get_grade())
print(p3.get_grade())

#在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。
#通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。
# 类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count。
print('===========================================')
class Person(object):
    count = 0
    @classmethod
    def how_many(cls):
        return cls.count
    def __init__(self, name):
        self.name = name
        Person.count = Person.count + 1

print(Person.how_many())
p1 = Person('Bob')
print(p1.how_many())
#=================python中继承一个类========================#
#一定要用 super(Student, self).__init__(name, gender)
# 去初始化父类,否则,继承自 Person 的 Student 将没有 name 和 gender。
#类具有继承关系,并且子类类型可以向上转型看做父类类型,
# 如果我们从 Person 派生出 Student和Teacher ,并都写了一个 whoAmI() 方法
class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
    def whoAmI(self):
        return 'I am a Person, my name is %s' % self.name
class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score
    def whoAmI(self):
        return 'I am a Student, my name is %s' % self.name
class Teacher(Person):
    def __init__(self, name, gender, course):
        super(Teacher, self).__init__(name, gender)
        self.course = course
    def whoAmI(self):
        return 'I am a Teacher, my name is %s' % self.name
p = Person('Tim', 'Male')
s = Student('Bob', 'Male', 88)
t = Teacher('Alice', 'Female', 'English')
#当我们拿到变量 p、s、t 时,可以使用 isinstance 判断类型:
print(isinstance(p, Person))
def who_am_i(x):
    print(x.whoAmI())
p = Person('Tim', 'Male')
s= Student('Bob', 'Male', 88)
t= Teacher('Alice', 'Female', 'English')
who_am_i(p)
who_am_i(s)
who_am_i(t)
# type() 函数获取变量的类型,
print(type(p))
#可以用 dir() 函数获取变量的所有属性
print(dir(p))
#如果已知一个属性名称,要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数了.
print(getattr(s, 'name'))  # 获取name属性
print(setattr(s, 'name', 'Adam'))  # 设置新的name属性
#=================特殊方法====================#
#__str__()函数
#__len()__
#__call__函数 等等
class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
    def __str__(self):
        return '(Person: %s, %s)' % (self.name, self.gender)
    __repr__ = __str__
p = Person('Bob', 'male')
print(p)
#如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数。

class Students(object):
    def __init__(self, *args):
        self.names = args
    def __len__(self):
        return len(self.names)
ss = Students('Bob', 'Alice', 'Tim')
print(len(ss))

#============下一步需要学习===============#
#1、IO与socket
#2、进程和多线程
#3、web开发
#4、数据库

你可能感兴趣的:(python)