#Python基本语法
Python的应用范围非常广,至少要分为:科学计算、脚本运维、爬虫、业务系统(web,部分云计算)等方向。
廖雪峰 Python教程的学习笔记
Python之所以简洁,主要感觉到的是它代码语法和函数上没有拘泥于固定的几种格式,十分的灵活,定义出了各种语法操作(比如 a**b,a<b<c, try xxx with xxx),以及方便的函数等,不像Java、C++一样拘泥于固定的格式。就像比较灵活有很多新东西的年轻人和一个古板的老人一样。
###1、输入输出:input进行输入,print进行输出: `name = input('请输入')` `print('hello', name)` input返回值即输入内容,可以传入提示内容 --- 注意想要输入整数,使用`age = input("请输入年龄:")`, 因为Python无类型,所以默认输入的是字符串,如果这时直接对age按整数处理,就会报错。需要进行转型的处理 `age = int(age)` print输出,可以传入多种类型的参数,字符串,字面量数值或者变量: --- print('abc','def') //输出abc def 其中的,相当于空格 print('abc'+'def') // 输出abcdef --- print()输出默认是带换行的,想要不换行,使用print("xxx", end = "") 即可, 3.x的版本上 还有seq = xxx, 代表逗号分隔符是哪个
###2、数据类型及运算
Python的基本数据类型有:
Python是动态类型语言,定义变量时不用再前面加上类型名称,所以也没有类型声明,根据给出的值判断是什么类型。
1、空值 None 表示
2、布尔类型 True False表示
布尔类型的运算不用符号,用的是字母名称!!有点不科学了
and、or和not三种
3、整数 10,9,8 等
Python可以直接处理任意大小的整数,和C、Java语言不一样,
另外注意,用 / 表示浮点数除法,用 // 表示取整除(地板除),不管整数还是小数相除都会取向下整
4、浮点数
5、字符串
字符串可以使用’或"引起来,还可以用’’’ 三个单引号引起来,里面的内容可以直接换行
这里面的字符串和Java一样的内部结构,是不可变对象
如print(’’’ 第一行
第二行’’’)
就会输出
第一行
第二行
转义:在字符串内部使用\x 进行转义,一个为了方便的操作,在’或"或’’'引起来的字符串前面加上r,里面的转义的字符就不转义了
数据类型的转型见前面有age = int(age)
这样转型,用的函数法处理,没有像C或Java定义这门的语法
###3、字符串和编码:
Python默认使用Unicode进行编码,现代大多数的操作系统和语言都支持Unicode. Unicode 字符长度为2个字节,能表示的字符仍然有限,且可能可能浪费内存,于是后面出现你UTF-8,它是变长的,显然更为灵活。所以一般情况下,读入或写出数据时都是以UTF-8为标准。在内存中用数值表示字符,不同的编码码制不一样,同一个字符的数值不同,最后读出来的可能就是乱码。所以在程序中对字符进行编码转换,也就是将内存中的表示数值转换成对应码制中的表示数值。
3.1 字符与编码号转换
ord(‘A’) 获取某个字符的编码
65
chr(66) 将整数转换到对应的字符
3.2 字符串与byte转换
使用
"xxx".encode("yyy")
encode characters to byte array use the given encoding, the result be printed is asicii or hex number
"xxx".decode("yyy")
parse byte array to characters use the given encoding,
it can contains a paramter which is used to ingonor the a small part of wrong bytes.like "xxx".decode("yyy", errors='ignore')
; otherwise the method will report an error
3.3 代码格式
代码文件也要声明格式,写在代码中的字符才能被正确处理,可在源文件的开头加上注释,告诉python解释器,代码使用的格式,另外还必须要在编辑器或IDE中指定代码使用的格式才行。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
**3.4 字符串的基本方法 **
(1)len(‘xxx’) 返回字符串的长度,如果在前面加上(b’sdfsfsdfs’) 转换成了byte的形式,就会返回byte数组,可见可以直接使用len()方法,不用像Java一样一定要加上类名或者创建对象,那样格式化,Python的代码形式更为灵活。
(2)格式化输出,Python支持和C语言一样的格式化输出操作,有所优化,形式为
'Hello, %s' % 'world'
"%d * %d = %0d "%(i, j, i * j)
匹配多个
用%连接形参和实参即可,形式上更简洁了。 用%连接,很巧妙,代码的语法跳出了C那样的固定式的限制,显得灵活自由。
另一个,它的%s,就想print语句一样,可以格式化各种基本的数据类型。
# 打印9*9乘法表
for i in range(1, 10):
for j in range(1, i+1):
print("%d * %d = %0d "%(i, j, i * j), end='')
print()
还可以使用字符串的format的方法,比如
'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
会输出
'Hello, 小明, 成绩提升了 17.1%'
格式为{d:xxx},d代表第几个参数,xxx代表附加处理
4. 集合:数组列表list和元组tuple、map的dict和集合set
Python数组也是很灵活的,它的集合类列表、字符串等,是可以直接判断相等的,里面所有的元素。
**4.1 元组 **
元组是不可变的数组,除了不可修改外,其它操作和数组基本一致,当然不可修改是指的它的元素指向的引用本身不能修改再指向其它,引用对应的对象内部是可以修改的。
一般情况下,能用tuple就用tuple,代码更安全,更高效。
初始化方法:
t=('sdsd', 5.4, 6, None)
t=3,2,1' 注意的是定义单元素tuple要加上,写成
t=(5,);`
不然如果是(5),那就变成数字5了。
4.2 数组列表
** 定义和初始化 **
l = ['Michael', 'Bob', 'Tracy']
因为动态类型,所以列表里面可以放任意不同类型的数据,包括列表自身。比如:
L = ['Apple', 123, True]
s = ['python', 'java', ['asp', 'php'], 'scheme']
使用列表中列表相当于多维数组,用s[2][1]可以访问数组中的数组
**元素访问和修改 **
l[i] 访问第i个
l[-i] 访问倒数第ige
l[i] = x, 赋值
l.append(x); 末尾加入
l.insert(i, x); 插入
l.pop(); 删除最后一个
l.remove(i); 删除第i个
4.3 相当于map的dict
定义和初始化:
dict的创建
d = {a:1, b:2, c:3}
d = zip(a,b) # a, b代表两个列表,比喻,两个列表合成一个dict,就想两条拉链合上一样。
操作
d['Adam'];#访问:这种方式只能访问已经存在的值,不存在的访问会抛出KeyError错误,可以先用if x in d 判断
d.get('Thomas')
d.get('Thomas', -1) # -1 为默认值
d['Jack'] = 88 赋值
d.pop('Bob')
使用map的注意是其key值必须是不可变对象,不然放进去之后变了就乱了,就找不到了等。同Java字符串以及整数、浮点数等基本类型可行。
另外,由于是无类型的,所以Python的key可以是不同类型
对于下标式访问,d[xx],只能
记忆法,元组,列表,dict,复杂度和灵活度越来越高,对应到的是初始化的依次用小括号,中括号,大括号。
4.4 set
创建方法
s={1,1,2,3} 这个和dict具有一致性,因为map就是set的转化
s = set([1, 2, 3]) // 就是将list转化为set
和dict类似的两个创建方法
基本方法
s.add(4)
s.remove(4)
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作,支持了
s1 | s2
s1 & s2
自然的在Python中也有浅拷贝和深拷贝,使用copy方法的时候要注意。
##3、列表高级特性、操作
###3.1 切片
切片就是获取集合的一个子集
L = [1,2,3,4,5,6,7,8,9,10]
L[a:b]表示获取L的下标a到b-1之间的元素的集合,如果a或b无值,则表示从0开始或到最后一个。a,b 可以使用负号的,b>=a 时,返回空,a或者b不在范围内都没事。
还有,可以间隔取数,如
L[a🅱️n] 表示每间隔n个数取一个数出来。
3.2 迭代
(1)正如Java的迭代器,只有对象是可迭代的,就能使用迭代语句进行迭代
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
用上面的语句判断即可
迭代dict ,默认迭代的是key,使用d.values()可以迭代value,使用d.items(),可以迭代key-value对
使用enumerate(x)函数可以同时迭代下标和值
for i, value in enumerate([‘A’, ‘B’, ‘C’]):
(2)迭代器Iterator
区别,迭代器对象与可迭代对象是不一样的,Iterator提供next()方法,返回下一个值,此方法是惰性的,只会计算下一个值。通过Iterablde的iter方法获得他的一个Iterator对象。
3.3 列表生成式
Python的列表生成式,功能强大,丰富
L = [x * x for x in range(1, 11) if x % 2 == 0]
如上,使用一行表达式生成列表,range(a,b) 后面表示的是对元素的过滤方式,for前面加一个表达式,表示对元素的计算式,这样生成最终的列表。
对于Map等的,还可以使用多个变量,就更强大了。
还可以多层循环,需要计算时就将内层的变量都可以写到两端
[m + n for m in ‘ABC’ for n in ‘XYZ’]
5.条件语句和循环语句
age = 3
if age >= 18:
print('your age is', age)
print('adult')
else:
print('your age is', age)
print('teenager')
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
几个不同:
(1) 用空格代替括号开始,:代表括号结束
(2) Python 使用缩进代替{}限定语句块,缩进结束,代表语句块结束。
(3)else if 协作elif
同样的,对于循环语句Python也采用同样的格式进行处理。
有2种写法:
names = [‘Michael’, ‘Bob’, ‘Tracy’]
for name in names:
for num in range(10): # 迭代 0 到 9 之间的数字
for num in range(10,20): # 迭代 10 到 19 之间的数字
for letter in ‘Python’: # 迭代字符串
while(n > 0)
多重判断或多重循环在里面加上语句即可。