Python简介
python是面向对象(Python 中的每样东西都是对象)的一门解释性语言,其为我们提供了非常完善的基础代码库和大量的第三方库(所谓的库就是说有很多基本的已经写好的现成的东西,来帮助你加快开发进度)
python非常适合开发的以下应用:
1、首选是网络应用,包括网站、后台服务等等;
2、其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等
在运行python前,需要将python源代码转化成机器能够识别的机器码,而这就是通过python的解释器来完成的,例如:CPython
变量
python中定义变量很简单,不用像java一样先定义变量类型(静态语言)
int a = 123; // a是整数类型变量
a = "ABC"; // 错误:不能把字符串赋给整型变量
并且python可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量(动态语言)
a = 'ABC'
因为python解释器对于这个操作是干了两件事:
1、在内存中创建了一个'ABC'的字符串对象;
2、在内存中创建了一个名为'a'的变量,并把他指向'ABC'
输出
字符串输出:print('liu','cheng') ','号会输出一个空格
整数输出:print(100)
计算结果输出:print('100 + 200=',100+200)
输入
name = input('please input your name: ')
注意:input输入的类型是str,所以要输入num的话,要记得进行类型转换一下
name = int(input('please input your name: '))
运算符
>>> 10/3
3.3333333333333335
>>> 10//3
3
布尔值可以用and、or和not运算
数据类型
不同的数据需要定义不同的类型,但是Python是一种动态类型化语言,所以无需声明变量类型。
i = 100
这个过程其实有两步:第一是创建一个整数对象;第二步就是将这个对象的引用赋值给变量
在python中可以直接处理的几种数据类型有:
. 整数
. 布尔值
. 浮点数
. 字符串
. 列表
. 字典
而Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的。
不可变:一个变量一般都会映射到一个内存地址,内存地址存储对象值,而当修改变量的值
时是将变量映射到了另一个内存地址,不是在原来的内存地址上进行修改
i = 5
id(i)
i += 1
id(i)
可变:修改变量的值时,是在原来内存地址上进行修改对象值
字符串使用'或者"来标示
加法进行字符串的拼接
如果字符即包含'或者",则print('I\'m "ok"'),进行转义
转义还有通过r,print(r'\n')与print('\n')是相同效果
还有就是内部有非常多要换行时,print('''line1 ... line2 ... line3''')
字符串表示中str与repr区别是repr是将字符串转换为合法的表达式,而str则是将字符串转换为更容易让用户理解的形式
布尔值
布尔值可以用and、or和not运算
列表(list)
list列表是可变对象,调用对象自身的任意方法,会创建新的对象并返回
python中的列表有点类似数组的概念,python中的列表list是一个有序集合,可以随时删除和添加元素
赋值:classmates = ['Michael', 'Bob', 'Tracy']
引用:classmates[0]
classmates[-1]
追加:classmates.append('adam')
插入:classmates.insert(1,'jack')
删除末尾与指定的:classmates.pop()
classmates.pop(1)
替换:classmates[1] = 'sarah'
列表加法和乘法:
L = [1] +[2] + [3] 此时L是[1, 2, 3]
L * 2 此时L是 [1, 2, 3, 1, 2, 3] 相当于将列表重复相加
还有就是元组(tuple),tuple初始化后就不能修改,所以tuple相比list更加安全。
t = (1, 2)
注意:t = ('a', 'b', ['A', 'B']) tuple中放置list,list是可变的。
tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
字典(dict)
dict与list的区别:
查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
dict的查找速度快,dict就是通过给定一个名字,比如'Michael',dict在内部就可以直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
赋值:d['Adam'] = 67
判断存在:'Thomas' in d 或者 d.get('Thomas')
dict内部存放的顺序和key放入的顺序是没有关系的。
dict的key必须是不可变对象。因为dict是根据key来计算value的存储位置
字符串和编码
在计算机的世界只有数字0和1,所有任何文本在计算机处理前都需要将其转为转换为数字; 最早的ascii编码用一个字节来对所有的字母、数字、符号等进行编码;
但是ascii是包含不了各国语言文字的,所以出现了unicode编码,unicode编码用两个字节来包含各国语言文字的编码;
unicode编码由于其特点所以使用率不是很好,直到utf-8编码出现改变了现状,utf-8广泛用于数据传输中;
字符串编码
'ABC'.encode('ascii')
由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。
如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes
字符串解码
b'ABC'.decode('ascii')
我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str
为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
格式化
经常需要输出'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字符串的方式。
常见的占位符有:
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
print('%2d-%02d' % (3, 1))
用%%来表示一个%
判断
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
循环
其实在python中for一般用于迭代,while才是真正的用于循环
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
break语句可以提前退出循环
continue语句跳过当前的这次循环,直接开始下一次循环
这两个语句通常都必须配合if语句使用
参考
这个是本人正在学习python的笔记纪录,后续会陆续发布自己学习过程中做的笔记及遇到的问题思考,和广大知友交流的同时也达到一个自我提高的目的,望广大知友对不正确的内容提出改正。