语句基础知识
1.1 print语句
print:
name='bob'
age='42'
print(name,age)
print(name,age,sep='_') #用_替换默认间隔符空格
print(name,age,end=' ') #用空格替换默认结束符换行符
1.2 import语句
1.2.1 模块
定义:module,可以看为一个工具类,可共用。其中能包含函数、类、变量、可执行代码
来源:python内置模块 第三方模块 自定义模块
模块内置属性:
- name:若作为模块导入则为模块名,若为主函数执行则为__main__
- file:当前模块绝对路径
- dict:由模块的数据属性组成的字典
- doc:模块中用于描述的文档字符串
- package:
- path:
- bases:类的所有父类构成元素
1.2.2 包
定义:package,包含模块的文件夹。一个文件夹(包)包含一个__init__.py 用于组织包,方便管理各个模块之间的引用、控制着包的导入行为,导入时执行__init__.py
1.2.3 命名空间
- local namespace:每个函数都有一个local namespace,存储函数的变量
- global namespace:每个模块都有一个global namespace,存储模块的变量
- build-in namespace:可以被任意模块访问,包含了build-in function和build-in exception
变量搜索顺序:
- local namespace,搜索当前函数或类方法
- global namespace,搜索当前模块
- build-in,搜索build-in函数和变量,若还不是则会报错
- 对于闭包,若在local namespace找不到该变量,则下一个查找目标是父函数的local namespace
1.2.4 from module import和import module
from module iport是将模块module的函数或者变量引到当前的命名空间,调用时无需module.name
import module将module本身引入,包括其命名空间,调用时需module.name
1.2 赋值语句
序列解包:
x,y,z=1,2,3
x,y=y,x #交换x,y值
value=1,2,3
x,y,z=value
d={'x':'as'}
a,b=d
a,b,*c=1,2,3,4 c-->[3,4]
链式复制:
x=y=1
增强赋值
x+=1
x*=2
x/=5
1.4 条件语句
bool值:
- False None 0 “” {} [] () 都为假
- 其余值都为真
if语句和else语句:
name='Job'
if name.endwith('Job'):
print('hello')
else:
print('world')
条件表达式:
str="hello" if name.endwith('Job') else "world"
elif子句:
num=10
if num>0:
print('s')
elif num>-1 and num=<0:
print('asd')
else:
print('asd')
常见条件:
- x==y
- x<y
- x>y
- x!=y
- x is not y
- x is y
- x in y
- x not in y
- 1<x<10 支持链式比较
- x>10 and x<100
- x<0 or x>5
- not x
断言(assert):
assert 0<age<100
assert 0<age<100,"the age must be realistic"
1.5 循环
while循环
x=1
while x<=100:
x+=1
for循环:
word=['a','b','c']
for word in words:
print(word)
for number in range(1,100)
print(number)
#打印0-99
d={'x':1,'y',2}
for key in d:
print(d[key])
for key,value in d.items():
print(key,value)
迭代工具:
- 并行迭代
names=['bob','jack']
ages=[44,12]
for name,age in zip(names,age):
print(name,age)
# 两个序列不一样长时zip取较短序列缝合
- 迭代时获取索引
for index, string in enumerate(strings):
if 'ab' in strings:
strings[index]='cd'
- 跳出循环
- break
- continue
- 循环后跟else,正常结束才执行,break结束循环时不执行
for x in range(0,99):
if x==50:
break
else:
print('asd')
- 简单推导
y=[x*x for x in range(10)]
#y ----<[0,1,4,...,81]
z=[x+y for x in range(3) for y in range(4)] #嵌套for
y=[x*x for x in range(30) if x % 3 == 0]
#结合if
1.6 pass、del、exec语句
- pass 占位符,python中代码块不能为空
- del 删除对象,删除的是对象,不是值
- exec执行字符串代码
exec("print('asd')")
#有可能会影响到当前命名空间的变量
#指定命名空间,将变量存储到字典中
scope={}
exec('x=1',scope)
scpoe['x']
#exec执行的是语句,不返回值,eval里的是表达式有返回值
eval("x*10") #返回10
#eval('x=10') 会报错,x=10是表达式不是语句
1.7 区分表达式和语句
- 表达式expression:x+1 x*10 fun() 执行一些操作返回一个值
- 语句statement:(不一定返回值)分为简单语句和复杂语句
x=10 赋值语句
if x>10:
pass if语句