python基础复习
解释型语言和编译型语言
# 主流的编译型语言
C语言:编译型语言,跨平台运行
java:编译型语言,一处编码,处处运行(编译过程:将java源代码编译成字节码文件.class,---不能运行在操作系统上---jvm(Java虚拟机))
go:编译型,跨平台编译(windows平台可以编译出mac平台的可执行文件),所有go代码打成一个可执行文件
# 解释型语言
python: 强类型动态语言
js:只能在浏览器中运行,nodejs
php:web开发
基本数据类型
# type与object的关系
(1)python中一切皆对象,类也是一个对象
(2)python中所有的类(除了object类)都继承于object
基于以上的两点,我们可以得到以下的结论:
(1)type和object的类都是type;
(2)type类是继承于object
深浅拷贝
# 一切皆对象的好处
不同类型的变量之间可以相互赋值,如a=100,a='lxx'
其本质上,因为变量指向的是一个内存地址,因此会出现深浅拷贝的问题
from copy import copy
from copy import deepcopy
beast = ['lxx','egon','jason']
person = beast # 直接赋值
print(beast is person) # True
u1 = ['egon',[18,'female'],['dbj','hecha']]
u2 = copy(u1)
u2[1][1] = 'male'
u2[0] = 'alex'
print(u2) # ['alex', [18, 'male'], ['dbj', 'hecha']]
print(u1) # ['egon', [18, 'male'], ['dbj', 'hecha']]
# 浅拷贝只拷贝列表的父对象的内存地址,而不会拷贝子对象的内存地址
u1 = ['egon',[18,'female'],['dbj','hecha']]
u2 = deepcopy(u1)
u2[1][1] = 'male'
u2[0] = 'alex'
print(u2) # ['alex', [18, 'male'], ['dbj', 'hecha']]
print(u1) # ['egon', [18, 'female'], ['dbj', 'hecha']]
可变数据类型与不可变数据类型
#字典,列表,集合 可变类型
#数字,字符串,元组 不可变类型
# 字典的key必须用不可变类型,可以hash
# 看一下这篇博客
https://www.cnblogs.com/xiaoyuanqujing/articles/12008689.html
# python中的参数传递是值传递还是引用传递?
python中参数传递都是copy一份传递过去,由于一切皆对象,传过去,都是地址,python中区分可变和不可变类型,可变类型在函数中修改会影响原来的,不可变类型,不会影响原来的
字符编码
# 计算机的计量单位:
bit比特位:0或者1的一个小格
8个bit位是一个byte,一个字节
1024个字节---》1kb
1024kb---》1mb
1024mb---》1gb
1个字节---》2的8次方中变化,就可以表示出所有的字符(数字,字母,标点符号)
计算机到了中国---》中国汉字--》gbk编码
但是到了不同国家,不同国家有不同国家编码方式,就会出现乱码问题
Unicode编码统一了,字符和数字的对应关系
utf-8:目前主流的编码方式
utf-16
需要说清楚:assic码,gbk,unicode,utf-8
闭包函数
1 定义在函数内部
2 对外部作用域有引用
函数是一等公民:函数可以赋值给一个变量
# 装饰器是闭包函数的典型应用
# python中有装饰器语法糖 @
def wrapper(func):
def inner(*args,**kwargs):
# 代码
res=func(*args,**kwargs)
# 代码
return res
return inner
# def a():
# print("xxx")
# 没有语法糖
# a=wrapper(a)
# a()
# 有语法糖
# @wrapper()
def a():
print("xxx")
# 面向切面编程 AOP
# OOP 面向对象编程