本系列内容来源于 廖雪峰的Python教程 点击查看原文
入门零碎知识(主要回顾和Java不同的地方)
python3 打印
print("Hello Wolrd!")
句末不要分号
多字符打印
print("hello","world")
中间用 空格相加
运算
print() 里面可以直接进行运算
读取控制台输入
input() 读取出来是个字符串
布尔值 True False 记得首字母要大写
布尔值可以用and、or和not运算
python的除法
/ 这个是数学上的直接相除 得到的结果一定是浮点数
// 两个斜杠 是整除
对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:
Python对bytes类型的数据用带b前缀的单引号或双引号表示:
b'ABC'
python中的格式化
和c语言差不多
print('Hello, %s' % 'world')
print('%s%s'% ('你是','好人'))
输出:'Hello, world'
你是好人
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
可以都使用%s
如何要输入%时, 使用%%
Python中的列表(list),有序集合,可以随时添加删除元素
list = ['a','b','c']
len(list) = 3
list[0] 通过下标进行访问
python支持倒叙访问
list[-1] 取最后一个元素
list[-2] 取倒第二元素
列表支持内嵌
>>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']
其中 s[2] 又是一个列表
元组 tuple
有序列表,与list很相似,但是tuple一旦初始化就不能修改.
t = (1, 2)
tuple注意点:
t = (1)
这句话有歧义 ,会被当括号处理
所有 元组中只有一个元素的时候,这样定义
t = (1,)
>>> t = (1)
>>> t
1
>>> t=(1,)
>>> t
(1,)
else if 语句
可以简写为 elif
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
if语句还可以这样写
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。
if x:
print("True")
dict 字典
查找速度极快,和java的的map差不多
d = {"1":"tom","2":"youxuan"}
set 无序,不重复
新建要传一个list列表
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
数据类型转换
>>> int('123')
123
>>> int(12.34)
12
>>> float('12.34')
12.34
>>> str(1.23)
'1.23'
>>> str(100)
'100'
>>> bool(1)
True
>>> bool('')
False
函数引用
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数
1
空函数
def nop():
pass
if age >= 18:
pass
pass是占位符,如何不加的话,程序会报错
参数检查 isinstance关键字
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
函数多个返回值
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
注:如果接收值是一个,返回值会自动转换为一个tuple
函数的默认参数
def power(x,n=2):
print(x,n)
注:默认参数要在必选参数后。
默认参数要牢记一点:默认参数必须指向不变对象!
函数的可变参数
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum +n * n
return sum
调用:
calc(1,2,3)
calc(1,2,3,4,5)
可以传入0个或任意个参数
如何有一个存在的tuple或者list:如nums = [1,2,3]
可以这样调用calc(*num)
关键字参数
可以传入0个或者多个参数,会被自动封装为一个dict
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
命名关键字函数
def person(name, age, *, city, job):
print(name, age, city, job)
和关键字参数**kw不同,命名关键字参数需要一个特殊分号
>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer
分隔符*,*后面的参数被视为命名关键字参数。
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
def person(name, age, *args, city, job):
print(name, age, args, city, job)
函数的参数组合
参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
Python的高级特性
切片
相当于Java中的截取
list tuple string 都支持切片
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
>>> L[0:3]
['Michael', 'Sarah', 'Tracy']
>>> L[:3]
['Michael', 'Sarah', 'Tracy']
第一个索引不填,默认为0
>>> L[-2:]
['Bob', 'Jack']
>>> L[-2:-1]
['Bob']
可以从后面开始取 倒第一下标为-1
前10个数,每两个取一个:
>>> L[:10:2]
[0, 2, 4, 6, 8]
所有数,每5个取一个:
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
只写[:]就可以原样复制一个list:
>>> L[:]
[0, 1, 2, 3, ..., 99]
字符串'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'