和Java的区别
语法:
- 不需要 ; 结尾
- 弱类型
- 判断条件没有 ()
- 没有 { } 代码块,采用: + 4空格缩进
数据类型
- list list=[1,2,3]
- tuple t = (1,2,3)
- dict d={‘Michael’: 95, ‘Bob’: 75, ‘Tracy’: 85}
- set s = set([1, 2, 3]) ##无序 不重复
- None(同 null)
函数
内置函数:
- int(‘123’)
- float(‘1.02’)
- str(100)
- bool(1)
函数指针:就是函数名,指向一个函数 对象 的引用
a= abs
a(-1)
:1
函数定义
- 代码块 不用 { } 表示
- 参数和返回值都不用声明类型
def my_abs(x):
if x >= 0:
return x
else:
return -x
关键字
pass [=continue]
返回多值(本质上是返回一个tuple类型):
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
x,y=move(1,2,5)
print(x,y)
参数有讲究
- 默认参数
def add_end(L=[]):
L.append('END')
return L
====================
L 作为一个变量保存到了内存中,每次调用都会有变化
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
- 可变参数
java : void cacl(Integer… number);
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
- 關鍵字參數
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
keyFun('geguo',12,height='185',weight='170')
運行結果:
name= geguo age= 12 other= {'height': '185', 'weight': '170'}
kw 自動被封裝成了dict
限制關鍵字參數只包含固定字段:
如果輸入其他字段會報異常
def person(name, age, *, city, job):
print(name, age, city, job)
要注意定义可变参数和关键字参数的语法:
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict。
以及调用函数时如何传入可变参数和关键字参数的语法:
可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或> tuple,再通过args传入:func((1, 2, 3));
关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过kw传入:func({‘a’: 1, ‘b’: 2})。
使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。
高級特性
- 切片
用索引取list中的元素:
index 用 : 分開 取值區間 [a,b)
取出1,2 兩個位置的元素
print(L[1:3])0 可以省略
L[:3];
L[-10:] 倒數10個數指定step 多一個:
L[:10:2]
tuple 也可以進行相同的操作
迭代
- 迭代list,dict,字符串等;
for key in d:
print(key)
for value in d.values():
for ch in 'ABC':