Python入门基础知识总结

一、介绍

课程来源:慕课网 python入门

读完python入门课程和后续课程后,觉得比较混乱,想整理一下自己的知识点。如果对你有帮助那再好不过。前面会给出代码,如果觉得看的懂可以直接跳过我给的解释,如果觉得有疑问,后面的我会给出详细的解释

@python是动态语言,你会发现定义一个变量可以任意,甚至随便赋值都可以。这和静态语言严格申明变量类型有所不同,下面是一些关于两种语言的摘要,静态语言以Java为例。

静态类型有利于工具做静态分析,有利于性能优化,有利于代码可读性
有些人总是拿完成同样任务所用代码量来做比较,得出python优于java的结论,不得不说这是非常片面的观点。java是有些啰嗦,不过ide能帮忙减少80%以上的键盘敲击,同时静态分析能帮忙解决80%以上的低级错误,代码提示能帮忙减少80%以上的查文档时间,至于强大的重构能力更是python望尘莫及的,所以只要是稍微大的项目,用java很可能比python开发速度更快。

越是复杂的项目,使用静态语言可以利用编译器更早的发现和避免问题。这并不是说动态语言并不能用于大型项目,但是在超过一定规模之后,动态语言轻便灵活的优势就会被重构时的overhead给抵消掉。另一个原因是性能上的。同理,也不是动态语言写不出高效的代码,而是你花在优化上的时间会更多,而团队人多了水平难免参差不齐,不如静态语言稳妥。

那静态类型语言的优势究竟是什么呢?我认为就是执行效率非常高。所以但凡需要关注执行性能的地方就得用静态类型语言。其他方面似乎没有什么特别的优势。

@优雅,明确,简单。适合开发系统工具和脚本,网站。代码量最少,开发快,但运行较慢。不适合贴近硬件,游戏适合用C要用到渲染等技术,ios和Android都有自己的语言。

@python2.7版本和3.X版本不兼容,用的早的程序大多是2.7,但是2020后,2.7就不在用了,主要用于维护。所以现在开始学习的可以学3.X。虽然上面那个课程是2.7版本的。

本书把大一点的Python脚本称为程序,简单的Python称为脚本。

@跨平台,几个系统下都能运行。

@Python的优点是具有强大的模块功能。

@Python解释器会将.py文件编译为.pyc字节码文件,再编译为.pyo文件计算机可以识别。

@命名规则:
模块名,就是文件名,用小写加下划线的形式。lower_with_under
类名:Pascal风格,CapWords
Functions: 小驼峰命名,myFirstName

@安装python很简单,到官网下载下一步安装,记住安装路径,一般不要安装到C盘,除非你的C盘很大。可以在DOS窗口里查看

DOS窗口输入python

出现这种错误需要修改环境变量,将你的python路径添加进去,
我的电脑–》属性–》高级系统设置–》环境变量–》系统变量Path

我的路径

记住前面加分号“;”不是冒号。安装的时候提醒过你记住你的安装位置了。

@在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。

@对缩进要求严格,首行不能有空格。

@理解变量在计算机内存中的表示也非常重要。当我们写:a = ‘ABC’时,Python解释器干了两件事情:
1. 在内存中创建了一个’ABC’的字符串;
2. 在内存中创建了一个名为a的变量,并把它指向’ABC’。

@用PDB调试
Import pdb
pdb.set_trace() #相当于运行断点,停在这里,然后可以用p 变量名 ,查看变量。或者用命令c继续运行。IDE最上面有基本调试工具。

list

#@1
A = [x for x in range(10)] #或者 A = list(range(10))
A2 = [x*x for x in range(10)]
B = list('abcdef')
C = [x for x in range(1,100,2)] 
D = [x for x in A if x%2==0] #条件过滤表达式
E = [i*100+j*10+k for i in range(1,10) for j in range(0,10) for k in range(1,10) if i==k]
A[11] #报错,不能越界
A[-1] #倒序访问,输出9
A.append(11) #末尾加入数字11
A.pop()  #末尾删除9
A.pop(-2)  #删除第二个数字8
A.clear() #清空列表
A.insert(1,'99')  #在第二个位置,插入99
A[0],A[-1]=A[-1],A[0]  #首尾数字交换

@1初始时A= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
@1初始时B=[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]
@1初始时C=[从1,到100的奇数]
@1这种写法就是Python特有的列表生成式。利用列表生成式,可以以非常简洁的代码生成 list。

#@2
L[:5]
L[0:5]  #输出[0, 1, 2, 3, 4]
L[-5:]  #输出[5, 6, 7, 8, 9]
L[1:5]  #输出[1, 2, 3, 4]
L[0:5:2] #输出[0, 2, 4]

str1 = 'abcdefg'
str[:3]  #输出abc,操作通列表相同。

@2列表的切片操作‘开始元素’:‘最后元素’:‘取元素间隔’

tuple

@tuple一旦创建完毕,就不能修改了, 创建tuple和创建list唯一不同之处是用( )替代了[ ]。

#@1
 T = tuple(range(10)) #两种方式一样
 T = tuple(x for x in range(0,10)) 

@1输出 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

#@2
T1 = (a)
T2 = (a,)

@2正是因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义:

dict

#@1
test = {'Alice':'21',
        'Bob':'22',
        'Clike':'23'}
test.keys()  #dict_keys(['Alice', 'Bob', 'Clike'])
test.values() #dict_values(['21', '22', '23'])
test['Bob']  #输出22,找不到报错
test.get('Bob')  #输出22,找不到返回空,不会报错。
len(test) #输出3
test.pop('Bob')  #输出22,删除这个元素
test.clear()  #清空字典

d1 = {'Daul': 75} #检查test是否有Daul,没有则加入
if not 'Paul' in test:
    test.update(d1)

for key in test:  #遍历test
    print key,':',test[key]

@1dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能重复。dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样

#@2
a = [1,'b','b',3,3,3,'d','d','d','d',5,5,5,5,5,'f','f','f','
f','f','f',7,7,7,7,7,7,7,'h','h','h','h','h','h','h','h',9,9,9,9,9,9,9,9,9,'j','j','j','j','j','j','j','j','j','j',11,11,11,11,11,11,11,11,11,11,11]
b = {}              #定义空字典
for d in set(a):    #去重复的值,set
    b[a.count(d)] = d   #去重后做计数,把数量和值写到字典b
for e in reversed(sorted(b.keys())[-10:]): 
    print e,':',b[e]   #排序列表键值并取后10个(数量最大的10个),翻转后打印出数量与值。

#遍历set
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
for x in s:
    print x[0],':',x[1]
s = set([1,2,3])
s.add(4)  #set添加元素
s.remove(3) #删除3,不存在会报错

@2set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。

str

#@1
'hello python'.title()  #输出 Hello Python
'HELLO PYTHON'.lower() #输出 hello python
'hello python'.upper() #输出 HELLO PYTHON
'123456'.isdigit()     #输出 True
'12345 python'.isalnum()#输出 True
'abcdef'.isalpha()     #输出 True
'abcdef'.find('abc')   #输出 True
'hello python'.split() #输出['hello', 'python'],中间可以为任意空格

@str可以切片,见list
@isinstance(s,basestring)判断一个变量s是不是字符串使用
@istitle(): 判定字符串是否每一个单词有且只有第一个字符是大写。
@ islower():是否全是小写,返回bool
@isupper():是否全是大写,返回bool
@title(): lower(),upper()实现上述功能。
@isdigit(): 判断数字 ;
@alphanumeric: 数字字母混合 isalnum()
@isalphabetic: 按字母顺序的 isalpha()
@find:找不到返回-1 和 in:返回bool判断子串和主串
@切分split()

python中数据类型

#@1
str1 = '0xff00'
print (eval(str1))

@1输出为65280。计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等eval(str)。将字符串作为表达式输出。

#@2
str1 = 'hello python'
str2 = "hello python"
print (str1 == str2)

@2为真。字符串是以”或”“括起来的任意文本,本身不作任何区分。一样作用。

#@3
a = 5 
b = 6
c = 4
if a>b and print("这条语句不执行"):
    print(True)
else:
    print(False)

@3要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计算。在计算 a >b 时,如果是 False,则根据与运算法则,整个结果必定为 False,因此返回False;如果是 True,则整个计算结果必定取决与 后面的运算,因此返回后面的值。

注释

#@1这是注释
'''
这是文档注释
很长
很长
'''

@1Python的注释以 # 开头,后面的文字直到行尾都算注释
@1Python中raw字符串与多行字符串,和注释很相似,都是’’’

输出print

#@2
print('a','b','c') #a b c

@2print会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是这样拼起来的:

函数

#@1
for index, num in enumerate(L):
    print(index,num)

@1一个函数,可以输出索引和值

isinstance(x, str) #判断x是不是字符串

猜你喜欢

转载自blog.csdn.net/qq_29611345/article/details/78759748