整理phper初学python想知道的知识点
目录
todo 未完有空续
基础语法
注释
打印输出
打印输出都有哪些方式
退出脚本
调试方式
运算符
- 关系运算符:仍然适用,比如! == 等
- 逻辑运算符:and or not(注意python中不是使用!符号作为非)
字符串
定义、增删改查连接、遍历、访问元素、判断空
-
字符串连接符 :+ 号
-
字符串支持数组方式访问字符串中的元素 str[1]
-
len()函数可计算字符串长度
-
截取子字符串:str[n:m],从第n+1个位置开始,截取m个字符,返回子字符串;[:m]表示从第一个开始取m个字符,[n:]表示从n+1个开始截取到结束
-
字符串是不可变的,虽然字符串支持使用数组的访问方式,但不能使用数组的赋值方式改变字符串的元素值,str[1]='b’,这是不允许的
-
str.find(“z”)方法支持查询字符串中的z字符
-
in是一个布尔运算符,‘a’ in ‘apple’,返回True布尔值
-
字符串也是支持采用for…in…的方式遍历
-
字符串也支持关系运算符直接比较 == < >
-
strip()方法(不是函数),类似于php的trim方法,可以去除前后字符,无实参时,默认去除空格
-
字符串拼接和重复与整数的加法和乘法
"a"*3 # 等同于: "a"+"a"+"a"
列表List
可以对比和php的数组,也和python的字符串一样,除了可变外。
定义、增删改查合并、遍历、访问元素、判断空
-
range(n)函数,返回0到n-1下标的列表
-
列表操作符
+号可以拼接列表:a+b,返回新的列表
*号可以重复列表: a * 4
:号同样可以用来切片:a[:n]
-
列表方法:
append方法:支持新增元素,修改列表 extend方法:类似+操作,列表扩展合并另一个列表 sort方法:排序
-
删除元素
del a[1] : 直接删除第二个元素
b = a.pop(1):取出第二个元素,并删除
a.remove(‘a’):删除值为a的元素
-
list内置函数 list()可以创建一个列表 list()也可以将字符串转换成列表:a = list(str)
-
列表与字符串
- split方法将字符串通过分隔符转换成列表,分隔符作为split的形参。方法类似于php的explode函数。
- join方法将列表通过分隔符合并成字符串,但要注意join是分隔符的方法,不是字符串的方法,字符串是作为join的形参。类似于php的implode函数。
字典
字典,除了key和列表不一样外,其他相似。使用花括号:{}定义。但可以使用方括号[]访问元素。列表的key是纯数字的,字典的key可以是很多种类型:数字,字符串
d = {"a":"apple","b":"banana"}
字典,也有叫映射,也有叫键值对
定义、增删改查合并、遍历、访问元素、判断空
- dict函数:生成一个字典,特别是可以将元组列表(比如dataDict.items())还原为字典
- len函数:也适用于字典计算元素个数
- in关键字:在字典里默认只能检查是否存在key,如果要检查是否存在某个值,可以先通过values方法返回值集合(类型不是list,而是dict_values),通过a in d.values(),判断是否存在值a
- get方法:d.get(‘a’,0),获取某个键值,默认返回0
- for x in d,遍历字典,x是键,不是值
- sorted函数:字典遍历是无序的,如果需要按顺序遍历字典,可以使用for x in sorted(d)
- global:全局变量。和php一样,我也不建议使用global关键字。
元组
元组与列表的区别在于元组的不可变性。
t = 'a', 'b', 'c', 'd', 'e'
t = ('a', 'b', 'c', 'd', 'e')
-
tuple函数:创建一个元组,同样也可以将字符串转换成元组
-
元组有个常用的操作:两个变量互换值
a = "apple" b = "banana" a,b = b,a print(a) print(b)
-
元组还常用函数/方法的返回值
def test(): return a,b,c
t = test() # t=> (a,b,c) aa,bb,cc = test()
-
汇集形参,*args。汇集形参结合lambda匿名回调有不错的效果
def max_len(*lists): return max(*lists, key=lambda v: len(v)) r = max_len([1, 2, 3], [4, 5, 6, 7], [8]) print(f'更长的列表是{r}')
-
元组与字符串
字符串split方法,通过分隔符将字符串转换成列表,还可以将列表中的前面几个元素直接赋值给元组:
a,b = str.split("-")
-
元组与字典
字典有个items方法,返回多个(key,value)元组组成的列表
d = {'a':0, 'b':1, 'c':2} t = d.items() print(t) # dict_items([('c', 2), ('a', 0), ('b', 1)])
元组的其他操作可以参考列表,比如访问、切片
注意:但元组和字符串一样,不允许通过赋值的方式改变元组元素 t[0] = ‘c’ # 这是不允许的
集合
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合。
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
parame = {value01,value02,...}
或者
set(value)
常用方法:
- add
- remove
- clear
文件
import os
os.path.* 提供文件名和路径的访问方法及判断方法比如:
isdir、isfile、exists、abspath、
数据库
import dbm
管道
cmd = 'ls -l'
fp = os.popen(cmd)
res = fp.read()
stat = fp.close()
编写模块
有个wc.py文件
def linecount(filename):
count = 0
for line in open(filename):
count += 1
return count
if __name__ == '__main__':
print(linecount('wc.py'))
另外个test.py文件
import wc
wc.linecount('wc.py');
__name__是一个在程序开始时设置好的内建变量。 如果程序以脚本的形式运行,__name__ 的值为 __main__ ,这时其中的代码将被执行。否则当被作为模块导入时,其中的代码将被跳过。
数据流程
判断
有哪些类型的判断,怎么判断
在Python中,False,0,'',[],{},()都可以视为假。
循环
有哪些常用循环类型,怎么循环
- for x in y 与js的for in 是不一样的,x直接就是y中的元素值,而不仅仅是key而已
函数
定义、访问
类
定义、访问
- __init__ 是初始化方法,如js的constructor,php的__constructor
- self,类中的每个方法第一个形参必须一个类本身,常用self变量名,也可以是其他变量名
- __前缀的属性或方法属于私有属性或私有方法,其他皆为公用方法或属性,外部可直接访问。在面向对象这方面python确实简洁到不如java和php细致。
特殊区别
-
+号作为字符串的连接符号,和js一样,但php用.符号
-
self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。
self 不是 python 关键字,我们把他换成 self1 也是可以正常执行的:
class Test: def prt(self1,str): print(str) print(self1.__class__) t = Test() t.prt("helo")
-
类型转换:int() 用于转换数字字符串为数值,对完全字符串无效 float() str()
-
type()查看变量类型
-
math模块,提供了大部分的常用数学函数
-
文档字符串 “““dddddd”””
-
is关键字:判断两个变量是否指向同一个对象(地址)
-
in关键字:元素是否在字符串或列表中
-
变量和对象之间的关联叫:引用
-
一般情况下,字符串定义赋值相同时,都是指向同一个对象。而其他列表、字典、类等即使定义且赋值相同的值,他们还是使用不同的对象,而如果是对象赋值给对象,则存在多个引用指向同一个对象,其中一个引用更改了对象值,则其他引用也跟着改变,这个和大部分语言是一致的。
-
zip:将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表;
a = [1,2,3] b = [4,5,6] zipped = zip(a,b) # 打包为元组的列表 [(1, 4), (2, 5), (3, 6)] ```
-
random.randint() ;random.choice(t)
-
repr函数:它接受任意一个对象作为参数,然后返回一个该对象的字符串表示。对于空白符号,它将用反斜杠序列表示:‘1 2\t 3\n 4’
-
copy模块 copy.copy(),复制后的对象,将不会是同一个对象。当然这个也是浅拷贝,没有复制嵌套的对象。copy.deepcopy()就是深拷贝。
-
any函数:any(false,true,false),只要有一个为真就返回true;not any也可以结合使用。
-
all函数:即都为true才返回true。
-
lambda:理解成匿名回调函数, lambda x:x*2,意思就是 function(x){return x*2}
问题
- 注释与自动提示不够完善
- 字符串处理还没有php强大
- 面向对象的语法不自然,比起java和php的写法略显小儿科
优点
- 相对于java、php、js,语法更简洁(简洁不代表自然),比如省去不必要的$、var、流程控制的大部分符号(括号、花括号、分号),public、protected等面向对象关键字