Python复习

常用操作符

**表示平方,//表示地板除法,/表除法
优先级:+ - 之类是一元操作符,逻辑运算符 and or not叫二元操作符,not or and 的优先级是不同的:not > and > or
在这里插入图片描述
特殊:双目操作符比左边的优先级高比右边操作符低

>>> -3**2

-9

>>> -(3**2)

-9
>>> 4**-2

0.0625

>>> 4**(-2)

0.0625
分支和循环

assert后面若是假则程序自爆

列表

列表里可以放不同类型的数据

增添元素
append()为列表增加元素,每次输入一个
extend([])扩张原理是用一个列表扩张另一个列表,所以参数应该是列表
insert(x,y),x是位置,y是增添的元素

删除元素
remove()与append同理
del语句 例如:del list
pop()从列表中取出一个元素并返回,在pycharm里看不到,里面加数字就和del同理

列表切片
列表切片拷贝是‘真’拷贝,之后切片的列表改变,拷贝后的不改变
列表直接赋给另一个列表是‘假’拷贝,原列表改变,拷贝后的也改变
列表可以进行比较和运算

元组就是不能修改的列表
tuple = (1,‘asw’)
元组的创建:
1.tuple = (1,)
注意要是元组里就一个元素要加 ‘ ,’,若是tuple = (1),则它认为tuple是一个整形
2.tuple = 1,
有‘ ,‘就可以认为tuple是一个元组
注意:元组一定要注意逗号

函数文档
def function():
'被单引号括起来的就是函数文档内容’
查看文档:function.doc

函数式编程重要语法结构:闭包
表现形式定义:如果在一个内部函数里对外部作用域(但不是在全局作用域)的变量进行引用,那内部函数就被认为是闭包。
调用:

1.
def funa(x):
    '打印这里'
    def funb(y):
        print('闭包+',x)
        return x*y
    return  funb
print(funa.__doc__)
i=funa(8)                             #这里i的类型是一个函数类型
print(i(5))

2.
def funa(x):
    '打印这里'
    def funb(y):
        print('闭包+',x)
        return x*y 
    return  funb
print(funa.__doc__)
print(funa(8)(5))

在这里插入图片描述
若直接调用funb(8)则会报错

使用变量时注意事项:

def funa():
    '打印这里'
    x=5
    def funb():
        x * = x               #这里想对x进行平方,但是在外面的x=5在funb()的外部作用域,会被屏蔽,所以x相当于没被定义
        return x
    return  funb
funa()
 该程序无法运行!

解决方案:
python3之前方案:容器类型不会被屏蔽

def funa():
    '打印这里'
    x = [5]
    def funb():
        x[0] *= x[0]
        return x[0]
    return  funb
print(funa()())

python3解决方案:关键字 nonlocal

def funa():
    '打印这里'
    x = 5
    def funb():
        nonlocal x
        x *= x
        return x
    return  funb
print(funa()())

运行结果:
在这里插入图片描述

类和对象

对象 = 属性 + 方法
描述一个对象:静态的成为属性,动态的称为方法
做类是为了达到量产对象的效果

#类对象:
class Tirtle:                               #python中类名是以大写字母开头
	#属性
	color = 'green'
	weight = 10
	legs = 4
			
	#方法
	def climb():
	    print("我在努力爬...")
	def run():
	    print('我跑可快了')

面向对象一般叫OO=Object Oriented
OO的特征:
1.封装
2.继承:子类自动共享父类之间数据和方法的机制
3.多态:不同对象对同一方法响应不同的行动

self
class Ball:
    def setname(self,name):
        self.name = name
    def kick(self):
        print('我叫%s,谁踢得我!'%self.name)

a = Ball()
a.setname('球A')
b = Ball()
b.setname('球B')
c = Ball()
c.setname('球C')
a.kick()
c.kick()

结果:
在这里插入图片描述
self就像门牌号,创建类时候第一个参数记得加self

面向对象编程

python的魔法方法

1. _init_(self)

class Ball:
    def __init__(self,name):             #这句语句打出在调用的时候就必须传入参数,不能如c=Ball()这样
        self.name = name
    def kick(self):
        print('我叫%s,谁踢得我!'%self.name)

b = Ball('土豆')
b.kick()

公有和私有

私有:name magling 名字改编/名字重整
在python中定义私有变量只需要在变量名或函数名前加上‘__’两个下划线,那么这个函数或变量就变为私有的了
若要引用私有变量,则在函数内部引用,或者:_类名__变量名(第一个单划线,第二个双划线)

class Plane:
        ___name = '波音747'
    def get(self):
        return self.___name
print(d.get())
print(d._Plane__name)

父类和子类
继承
class DerivedClassName(BaseClassName):
      子类              基类、父类或超类

调用例子:

class Father:
    def say(self):
        print("调用父类")
class Son(Father):
    pass
x = Father()
x.say()
c = Son()
c.say()
#结果都是打印调用父类

若父类和子类中有函数名一样:

class Father:
    def say(self):
        print("调用父类")
class Son(Father):
    def say(self):
        print("调用子类")
x = Father()
x.say()
c = Son()
c.say()
#子类不会被影响

调用未绑定的父类方法:

class Father:
    def __init__(self):
        print("调用父类")
class Son(Father):
    def __init__(self):
        Father.__init__(self)      #此语句将父类初始化传递给子类,但子类下面还是会运行
        print("调用子类")
x = Father()

c = Son()

结果:
在这里插入图片描述
经测试,想要调用类里的变量,只能调用属性里的变量,而且不能修改方法里的变量无法调用,除了_init_里的变量,想查看类里的内容可以用_dict_,会以字典的方式输出
创建一个对象(实例化)过程是创建一个对象空间,把这个空间地址赋给对象

class Father:
    def __init__(self):
        self.x = 5
    def cal(self):
        print(self.x)
class Son(Father):
    def __init__(self):
        Father.__init__(self)
        self.x = 6             #进行完继承后执行此语句x还是变成了6
    def cal(self):
        print(self.x)
b = Father()
B=b.cal()
c = Son()
C=c.cal()


结果:
在这里插入图片描述
super方法:

class Father:
    def __init__(self):
        self.x = 5
    def cal(self):
        print(self.x)
class Son(Father):
    def __init__(self):
        super()._init_()             #不用给基类名字,自动寻找
    def cal(self):
        print(self.x)
c = Son()
C=c.cal()

多继承
只需要在()里放入想要继承的n个父类即可
### Python的魔法方法

构造和析构

1.__new__(cls[,...]):实例化时候第一个被调用的方法
传入的是对象,传入的参数都会传入init()里,平时极少重写
当继承一个不可变类型时,又需要进行修改,就需要重写new()
2.__del__(self)
当对象被销毁时调用,注意只有所有对它的引用都被del之后才会启动垃圾回收机制,也就是调用该方法
实测在实例化时就被调用了。。。。。。

简单定制

import time as t

class Mytimer:
    #开始计时
    def start(self):
        self.start = t.localtime()
        print("计时开始")
    def stop(self):
        self.stop = t.localtime()
        self.__call()
        print('计时结束')
    #内部方法计算运行时间
    def __call(self):
        self.lasted = []
        self.prompt = '总共运行了'
        for index in range(6):
            self.lasted.append(self.stop[index]-self.start[index])
            self.prompt += str(self.lasted[index])
        print(self.prompt)
t1 = Mytimer()
t1.start()
x = input('\n结束计时请按1')
if x:
    t1.stop()
                       结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值