Python Object

基础

#注意大驼峰命名法则

class Cat:
    #封装规则记得 self

    def eat(self):
        print("I love to eat shit")
Jerry = Cat()
#Python 调用直接等于

Jerry.eat()
print(Jerry)
#打印内存地址,十六进制

print("%d"%id(Jerry))
#打印十进制纯内存地址, %x 是十六进制

同样 Python 可以快捷的使用外部定义其属性直接不写 function, 但是不推荐。同样在内部我们也可以自定义

def eat(self):
    print("%s love drink water"%self.name)
#在 python 里哪个对象调用这个 function 的 self, self 就引用到哪个对象

jerry = Cat()
jerry.name = "Jerry"

初始化方法

init 方法会直接在 python 中创建对象的时候帮你启动。和 java 以及 c++ 不同的是他们一般在 class 下或者一个过载定义初始化.

class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s is a null object"%self.name)
tom = Cat("Tom")

生命周期

在一个程序中在类名被创建的时候生命周期开始,一旦 del 方法被调用生命周期结束,del 方法会让程序在内存被销毁之前再做些事情, 系统销毁之前自动调用

del 使用参考

class Cat:
    def __init__(self, new_name):
        print("%s is a null object"%new_name)
    def __del__(self):
        print("I am going to die")
tom = Cat("Tom")
del tom # 定义什么时候调用对象销毁

print("-"5)

str 方法会在用户调用对象的时候直接打印对象的身份,必须返回一个字符串,举例如下:

class Cat:
    def __str__(self):
        return "I am a cat"
tom = Cat()
print(tom)

Python Tittle-Tattle

for i in range(-10,20,2):
    print(str(i))
# for 循环这样写会输出每 2 个间隔的 -10 ~ 20 的数字

import random
print(random.randint(10,20))
# 这样写会把 random 这个实例导入然后生成随机数

from random import *
print (randint(10,20))
# 这样可以选择导入模块中的哪些功能,* 代表全部,这样可以省略 random 前缀

import sys
sys.exit()
# python 中我们可以操作系统,sys 模块会根据不同系统类型识别后操作

import pyperclip 
pyperclip.copy("Shabi")
pyperclip.paste()
# pyperclip 是个剪切板拓展模块,我们可以用来复制粘贴

Local Scope and Global Scope 区别在于 Global Scope 变量可以全部使用,Local 只能用在自己的 def 里,在 return 完那个 function 后会自动回收销毁那个变量。Local Scope 和 Global Scope 可以使用同一变量名称,Java 中这叫过载。


Format Print

demo = "WDNMD"
types_of_people = 3
print(f"He said {demo}")
# 这里的 f 指的是 format 格式化的意思

x = f"There are {types_of_people} types of people."
print("." * 10)
# 不像 Java 一样不支持

print("Its fleece was white as {}.".format('snow'))
# 比起 % 解析我们直接使用 format function 会容易许多

在 Python 语言中不像 C 以及 Java 要用专门的 printf 去杂乱书写,直接 print 混合使用或者 % 符号解析同样支持。

formatter = "{} {} {} {}"
print(formatter.format(1, 2, 3, 4))
print(formatter.format("one", "two", "three", "four"))
print(formatter.format(True, False, False, True))
# 同理我们也可以提前制定格式,这样会容易许多

回顾下 \ 解析我们可以发现 \ 指的是 \; ' 会被解析成 ‘; 以及 " 会被解析为 “; \b 是回退一格。


Try & Except

和 Java 设计一样,if else 语句并不能处理所有的运行错误以及运行中错误。

numCats = 12
try:
    if numCats >=4:
        print("That's a lot of cats")
    else:
        print("That's not that many cats")
except ValueError:
    print("System Error, please check your input first.")

Python Lists

和 Java 设计一样,python 有多维列表, 列表解析以及反向排序。

spam = [['cat','bat'],[10,20,30,40]]
# 多维数组

spam = [10,40,20,2,12]
spam[0:4]
# 这里会打印 10 40 20 2 这些数字

spam[:4]
spam[1:] 
[1,2,3] + [3,4]
[1,2,3,3,4]
# 略写直接打印到底以及列表相加特性

del spam[2]
len(1,2,3,4)
list["Hello"]
# 删除以及检测变量长度和列出字符功能还有记住 in 和 not in 的区别

list(range(4,100,2))

# for loop 和 list 结合也有类似 Java 下的简化

cat = ['fat','orange','loud']
# 一般我们就是一个个的区赋值但是这样也可以

size, color, disposition = cat
# 这样就相当于 size = cat[0] 以此类推

size, color, disposition = 'skinny', 'black', 'book'
spam = 42
spam = spam + 1
spam += 1

List Methods

spam = ['Hello','Hi']
spam.index('Hello')
# 用于找寻关键词位置,以及 append , remove 和 insert functions 显而易见

spam.remove('Hi')
# 以及 sort() 用于数字排序,如果是文字大写会在前面,其余就会按照字母表顺序排序,如果要取消这一设定可以设定规则。

spam.sort(key=str.lower)
# 这样就会先全部转化为小写然后再排序

同理 Python 中的 string 也是和 Java 一样的列表字符组成的类,也可以使用列表打印字符,使用。

name = 'Zophie a cat'
newName = name[0:3] + 'the' + name[8:12]
# 结果为 Zophie the cat

以及变量地址值引用原理复习。


Python Copy

在我们常见的编程语言中很多是直接引用,而这样子原有值也会被改变;如果我们用一个外有模块就可以完全复制,解决这个问题。

import copy
spam = ['a','b','c']
cheese = copy.deepcopy(spam)
# 这样以来就相当于我们重新声明了一个变量和赋值,每个名字有自己单独的地址值


Dictionary

myCat = {'cat':'fat','color':'gray'}
myCat['color'] 
# 如果我们换个变量书写不同顺序的字典比对会发现他们的值依然相等由于字典不顾及顺序

'cat' in myCat
list(myCat.keys())
list(myCat.values())
list(myCat.items())
# 也可以用 for 循环打印出来

for k,v in myCat.items()
    print(k,v)

Dictionary Methods

利用字典和 for loop 统计字母表有多少字母。

import pprint
# 导入 pprint 模块可以让代码输出更加好看

message = '''THE END OF THE WORLD'''
# 元数据

count = {}
# 生成空字典用于制定

for character in message.upper():
# 遍历 message 里的每个字符,为了不区分大小写先提前全部转换为大写

    count.setdefault(character,0)
    # 把 count 字典的值和键设置为接下来碰到的字符以及 0 初始

    count[character] += 1
    # 当遇见一个字符的时候就把 0 加一

# 会一个一个字符的遇见然后叠加直到文本末尾

pprint.pprint(count)
# 最终用 pprint 模块打印出来

myCat = {'cat':'fat','color':'blue'}
print(myCat.get('name',0))
# Python 里的字典 get() 函数主要用于检测列表中是否存在 'name' 这样的键,如果有返回它的值,如果没有就返回 0

myCat = {}
myCat.setdefault('color','black')
# setdefault() 用于写入空列表,如果列表中有内容则不起作用,我们可以非常方便的使用这个 function 结合 for loop 写入数据