a) 简答易学
b) 解释性和编译性
c) 面向对象
d) 无需管理内存
e) 可扩展性及可嵌入性
f) 免费开源
g) 可移植性好:unix,linux,windows
h) 丰富的库
i) 胶水的语言
a) 代码文件:.py
b) 字节码文件:.pyc
字节码文件生成
import py_compile
py_compile.compile('01.py')
a) 优化代码文件:.pyo
优化代码文件的生成:python -O -m py_compile 01.py;
l 变量的赋值: a=1;
l 变量的重新赋值,是引用变量指向新的地址:
>>> a=123
>>> id(a)
1582815600
>>> b=123
>>> id(b)
1582815600
如上:引用变量a和引用变量b指向相同的内存位置
>>> e=345
>>> id(e)
50391056
>>> e=123
>>> id(e)
1582815600
如上,
变量的重新赋值,是引用变量指向新的地址
l 赋值运算符:=, +=, -=, /=, %=
l 算术运算符:/除, //整除, %取余 **i 幂运算
l 关系运算:!=不等,==完全等于
l 逻辑运算符:and,or,not
运算符的优先级(从低到高):
逻辑运算符:or 低于 and 低于 not 低于in,not in 低于is not
比较运算符
为运算符。。。。。
l 数字类型:
整形int,long
浮点类型:float
type()查看引用类型,引用类型无需声明,由赋值的类型决定
复数:>>> c=3.14j
>>> type(c)
l 字符串String
单引号,双引号,三引号
转义字符的使:\, \n -- 换行
>>> sya="let 's \" go \" "
>>> sya
'let \'s " go " '
三引号能报错字符串的格式,例如:
>>> mail="""tom:
i am jack
goodbye
"""
'tom:\n\ti am jack\n\tgoodbye\n\t'
>>> print(mail)
tom:
i am jack
goodbye
>>>
字符串是有序列的数据,可以通过索引取值,也可以截取
>>> array='abcde'
>>> array[1:4]
'bcd'
>>> array[::2]
'ace'
>>> len(array)
5
cmp(str,str2)比对序列是否相同;
相同返回0;
l 元组:
元组适合区分不同的属性,string切片不方便存在缺陷;
元组的每个元素,长度不受限制;
>>> info
('clark', '男', '30')
>>> info[0]
'clark'
--空元组
info=()
--单一元素元组
info=('1',)
因此诞生了一种定义变量的格式:
>>> a,b,c=(1,2,3)
>>> a
1
l 列表(list)
1. list是处理一组有序项目的数据结构:
2. 列表是可变类型的数据
>>> list0=[]
>>> type(list0)
>>> list0=['clark','30','male']
3. 添加元素
>>> list0.append('123456')
4. 删除元素:
>>> list0.remove(list0[3])
>>> list0.remove('saber')
l 字典
字典:键值对
字典是python中唯一的映射类型(哈希表
创建字典:
>>> dic1={'name':'clark','age':'25'}
>>> type(dic1)
添加值:
>>> dic1['tel']='123456'
弹出值:
>>> dic1
{'name': 'clark', 'age': '25'}
>>> dic1.pop('age')
'25'
>>> dic1
{'name': 'clark'}
清空值
>>> dic1.clear()
>>> dic1
{}
删除对象
>>> del(dic1)
获取对象
>>> dic1.get('name')
'clark'
#如果不存在减值3,返回error
>>> dic1.get('3','error')
'error'
>>>
单分支
if expression:
statements(s)
注:python使用缩进作为其语句分组的方法,建议使用4个空格代替缩进
缩进不对齐:
if 1<2:
print('ok')
print('NO')
报:SyntaxError: unindent does not match any outer indentation level
l if else语句判断规则不局限true,false
true: 表示非空的量(比如string,tupe,list,set,dictornay),所有非零数
false:表示0,none,null的量
l if elif else
f x>=90:
print("a")
elif x>=80:
print("b")
elif x>=70:
print("c")
elif x>=60:
print("d")
else:
print("e")
l 逻辑运算符:
>>> 1 and 1
1
>>> 1 and 0
0
>>> 0 and 0
0
>>> 1 or 0
1
>>> 2 or 0
2
>>> 1 and 2 and 0
0
>>> 2 and 1 and 2
2
>>> 1 or 0 or 0
1
>>> not 1
False
l for in_var in sequence:
statement(s)
直到整个序列被耗尽,遵循缩进原则;
序列指字符串,元组,字典
l rang(i,j[,步进])
--如果创建对象未整数
--i为初始化执行
--j为终止述职,但是不包括在范围内
--i不选,默认为0
>>> range(1,100,1)
range(1, 100)
l for遍历字典
s='hello'
l=[1,2,3,'a']
t=(7,8,9,'x','y')
d={'name':'clark','age':'30','x':'male'}
for x in d:
print(x) #遍历键值
print(d.items()) #遍历节点
l for遍历字典方法一:
s='hello'
l=[1,2,3,'a']
t=(7,8,9,'x','y')
d={'name':'clark','age':'30','x':'male'}
for x in d:
print(x)
print(d[x])
l for遍历字典方法二:
d={'name':'clark','age':'30'}
for k,v in d.items():
print(k)
print(v)
l break和ending的使用
for x in range(20):
print(x)
if x==6:
break
else:
print('ending')
l continue的使用:跳出本次循环
for x in range(1,11):
print(x)
if x==2:
print('hello 222222')
continue
if x==6:
break
print("#"*5)
else:
print("ending")
l 代码桩pass的使用
for x in range(1,11):
print(x)
if x==2:
print('hello 222222')
continue
if x==3:
pass #代码桩
if x==6:
break
print("#"*5)
else:
print("ending")
l 退出代码:exist()
for循环有次数的限制,要了解循环的次数;
当满足的条件的时候循环,不满足的时候停止,while语句
while exp
stat(s)
l break的使用
while x!='q':
print("hello")
a=input('please input somming,q for quit: ')
if a=='q':
break
l while continue else的使用
x=1
while x!='q':
print("hello")
a=input('please input somming,q for quit: ')
if not a:
break
if a=='c':
continue
print(a)
else:
print('ending')
--为什么使用函数
1.降低编程难度
2.代码重用
l --函数的定义和调用
1.def 函数名 (参数列表): #可以没有参数
l 形式参数和实际参数
形参:定义时候函数后面的参数
实参:调用的时候,圆括号的变量名称
l 函数编码:
#coding:UTF-8
#encoding:UTF-8
#coding=UTF-8
#encoding=UTF-8
l 函数默认参数:
>>> #coding:UTF-8
#encoding:UTF-8
#coding=UTF-8
#encoding=UTF-8
def fun(x='10',y='椰果'):
print('一个',x,'元',y,'口味')
>>> fun()
一个 10 元椰果口味
l 变量作用域:
1.局部变量
函数中定义的
2. 全局变量:文件顶部定义的可以供文件中任何函数调用;
强制声明变量
x='i am global var'
def fun():
x=100
print(x)
global y
y=200
fun()
print(y)
l 返回值:
1.函数被调用后会返回一个指定的值
2.函数调用后默认返回none; z=fun(2,3) none
3.return返回值
4.可以是任何类型
5.return执行后,函数终止;因此不能写两个return
6.区分返回值和打印
l 类型传值,对象,元组:
--元组
>>> def f(x):
print(x)
>>> f(range(10))
range(0, 10)
l 传入参数为元组情形2:
>>> t=('name','clark')
>>> def f(x,y):
print(x+y)
>>> f(*t)
nameclark
l 字典的使用:
d={'age':'30','name':'clark'}
def f(name,age):
print('name:'+name)
print('age'+age)
f(name='clark',age='30')
f(**d)
注:f(**d)要求键值和形参相同
l 处理冗余实参:
def f(x,*args):
print(x)
print(args) #args 元组
测试结果:
>>> f(1,2,3)
1
(2, 3)
l 处理冗余实参:字典
def fun(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
测试结果:
>>> fun(1,2)
1
(2,)
{}
>>> fun(x=1,y=2)
1
()
{'y': 2}
>>> fun(1,2,y=2,z=4)
1
(2,)
{'y': 2, 'z': 4}
是一种快速定义单行最小函数的,是从lisp借用来的;
>>> g=lambda x,y:x*y
>>> g(2,3)
6
好处:
1.lambda不需要考虑命名问题
2.在嵌套中,lambda让代码更容易理解
3.写执行脚步,lambda让代码更简洁
语法:
冒号前是参数,冒号后为返回值表达式
构建函数对象;
>>> g=lambda x,y:x*y
构造函数对象g
>>> g