1.Python
1)版本
Python分为两个版本:2.X版本和3.X版本,两版本之间不兼容
2)安装
安装时需勾选【Add Python 3.7 to PATH】
在cmd窗口输入 python能正确执行即可
.py
文件为python代码
3)Python解释器
CPython(自带)、IPython、PyPy、Jython(Java用)、IronPython(.net用)
exit()、quit():退出Python交互界面(cmd)
4)Python交互
交互界面(cmd)无法运行其py文件,需到cmd窗口运行:Python Xxx.py
运行py文件,其代码需要有print(Xxx),否则在控制台无结果输出
支持多个字符串,用逗号分隔;会自动拼接,逗号之间会有空格
用户交互界面,支持用户输入值存储到变量
>>>name = input()
Micheal
----
>>>name
'Micheal'
表示注释;Python是注意大小写的
Python基础知识
1)if语句:
a = 100
if a >= 100:
print(a)
else
print(-a)
Python要求Table为4个空格/4个空格进行缩进
数据类型
Python支持整数、浮点数、字符串、布尔值(可只是True、False,可结合or、and、not)、空值(使用None表示)
Python除了支持转义字符,还支持【r’’】便是【’’】内部的字符串默认不转义,该方式支持换行
支持’’’…’’'表示多行内容
print('''line1
...line2
...line3''')
Python是动态语言
可将任意数据类型复制给变量,Java是静态语言,静态语言要求赋值需要类型匹配,否则报错
- /:除法运算,获得浮点数
- //:地板除,获得其商数的整数
- %:取除法的余数
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行则是告知Linux/OS X系统,windows会忽略
第二行则是告知Python解释器,按照UTF-8编码读取代码
在Python中,采用的格式化方式与C一致,使用’%'实现
>>> 'Hello, %s' % 'world'
占位符 替换内容
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
%% 表示一个%
使用format()函数格式
print('Hello, {0}, 成绩提升了{1:.1f}%'.format('John',17.125))
2)List和tuple
- List可理解为有序的集合
>>>classmates = ['1','2','3']
List与Java同理,索引从0开始,否则会报越界
取最后一个元素,可用【-1】作为索引,同理-2,-3等等。如同倒序取值
- List.append(Element e)
追加元素到末尾 - List.insert(int index, Element e)
追加指定元素到指定位置 - List.pop()
移除末尾元素 - List.pop(int Index)
移除指定位置的元素
替换与Java同理
List为[]的话。len(List)为0,
- tuple可理解为数组,一旦初始化不能修改
>>>classmates = ('Michael', 'Bob', 'Tracy')
获取值与List一致
定义空tuple
t = ()
定义一个元素(使用下列是为了区别划分)
t = (1,)
3)条件判断(支持if、if-else、if-elif-else)
age = 20
if age >= 18:
print('your age is', age)
print('adult')
else:
print('your age is', age)
print('teenager')
----
if x:
print('True')
x为非零数值、非空字符串、非空List就会判断为True,否则为False
输入input()
返回值为str,需要捕获运行期的异常
4)循环:
- for-in循环,依次取集合中的元素迭代
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
range(int number)函数,生成整数序列,即[0,number)
即使用list(range(5)),获得一个集合
for x in range(101):
//循环步骤
- while循环
sum = 0
n = 100
while n > 0:
sum = sum + n
n = n - 1
break:跳出本循环
continue:跳过本次循环
5)dict
全程为dictionary,在其他语言中成为map,key-value形式
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
如果key不存在,则dict会报错d['Tom']
- 通过in判断key是否存在
dujgeResult = 'Tom' in d
if dujgeResult:
print('Test')
print(dujgeResult)
- 通过dict提供的get()方法,不设定默认值返回None,若设定返回设定值
result = d.get('Tom')
result = d.get('Tome', -1)
移除元素与List一致
- dict与List的区别
- dict查找、插入速度极快,不会随着key的增加而变慢;List的查找和插入花费的时间随着元素的增加而增加
- dic需要占用大量内存,内存浪费多;List占用空间小,即浪费内存很少
dict的key是不可变对象
6)set:会自行排序的集合,等同Java
会自动过滤重复元素
添加元素 add(key)
移除元素 remove(key)
注意,set原理与dict一样,不可放入可变对象
list的排序 sort()
数据类型转换
int(agre)、float(agre)、str(agre)、bool(agre)
函数的定义:
def 函数名(参数):
//函数体
return 指定值 #若无会默认返回None,且return None可以简写为return
引用其他py的函数
from 函数所在的py文件名 import 函数名
例子:>>>from homework import my_abs
空函数:
def nop():
pass
上述pass用作占位符,先存放让其代码运行起来
函数内对参数类型校验抛错
def test_a(x):
if not isinstance (x, (int,float)): #内置函数isinstance()
raise TypeError('bad operand type')
...
返回多个值:实际返回一个tuple值,存放在其中,按其所位置赋给对应的值
import math #表示导入math包
函数的参数默认值设定:
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
设定函数入参的默认值需注意:
必选参数在前,默认参数灾后
定义默认参数时,默认参数必须指向不变参数
函数的参数为可变参数,参数前加入*
def calc(*numbers):
//函数体
也可以传递集合进去
nums = [1, 2, 3]
calc(*nums) #即将list的所有元素作为可变参数传递
关键字参数:可变参数允许传入0或任意个参数,在函数调用时自动组装为tuple;而关键字参数类似,只是组装为dict
def person(name, age, **kw):
//函数体
关键字参数的调用类似可变参数调用
命名关键参数:即加入了if 'job' in kw
:判断存在
def person(name, age, *, city, job):
print(name, age, city, job)
和关键字参数**kw
不同,命名关键字参数要*
这个特殊分隔符,后面的参数视为命名关键字参数
如果函数定义中已有一个可变参数,则后面跟着的命名关键字不需该特殊分隔符
调用时必须有对应的变量名
person('Jack', 24, *, city='Beijing', job='Engineer')
*args是可变参数,接收的是一个tuple
**kw是关键字参数,kw接收的是一个dict
3.高级特性:
- 切片(Slice)操作符:
取前三个元素
L = [‘Michael’, ‘Sarah’, ‘Tracy’, ‘Bob’, ‘Jack’]
print(L[0:3])
即从索引0开始取直到索引为3位置,[0,3)的方式
print(L[:3]) #等价上面的
取后面的数
print(L[-3:])
每两个取一个
print(L[:5:2)
直接复制一个list
print(L[:])
tuple、字符串也支持 - 迭代
Python的迭代(Iteration)不仅可以用在list或tuple上,还可以作用在其他可迭代对象中
dict对象:
for value in values()
for k,v in items()
判断一个对象是否可迭代,调用collections模板的Iterable类型判断
isinstance(‘abc’, Iterable) #整数不可以迭代
Python内置enumerate函数:
for index, value in enumerate([‘A’, ‘B’, ‘C’])
for x, y in [(1, 1), (2, 4), (3, 9)]
–> 1 1 2 4 3 9 - 列表生成式
要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))
如果生成[1X1, 2x1, …, 10X10]
[x * x for x in range(1, 11)]
将要生成的元素x * x放到前面,后面跟for循环也可以追加if 判断或多层循环
要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(‘list=’, list(range(1, 11)))
生成[1x1, 2x2, 3x3, …, 10x10]
print(‘list=’, list(x * x for x in range(1, 11)))
追加if判断
print(‘list=’, list(x * x for x in range(1, 11) if x % 2 == 0))
多层循环
print(‘list=’, list(m + n for m in ‘ABC’ for n in ‘XYZ’)) - 生成器
列表生成器的[]
换为’()'即可
取值next(g),一个个取值;该对象是可迭代对象
yield会返回该值且会中断,下次调用时从此处开始 - 迭代器
将list、dict、str等Iterable变为Iterator使用iter()函数
- 凡是可作用于for循环的对象都是Iteratable类型
- 凡是可作用于next()函数的对象都是Iteraotr类型,表示一个惰性计算序列
- 集合数据类型如list、dict、str等是Iterable,而不是Iterator;Python的for循环本质是不断调用next()函数实现