本文对python3的基本使用做一下整理,假定有js基础。
概述
python和js一样,都是一种动态类型的语言,不需要编译,分号可选,整体入门门槛较低,不同的是js的语法借鉴的是java,而java又借鉴的c,因此这个系列的语法基本一致,而python中的一些特性,比如以缩进表示代码块、变量不需要声明,会让人感觉不太习惯。
其他需要注意的还有
- 以井号开头表示单行注释,多行注释上下用''' 或 """
# 第一个注释
# 第二个注释
'''
第三注释
第四注释
'''
"""
第五注释
第六注释
"""
- 用缩进表示代码块,同一个代码块中的缩进应一致,而不是像其他语言中可以使用花括号
if True:
print ("True")
else:
print ("False")
- 用input输入,用print输出
数据类型
python中数据类型使用type(var)获取,返回<class typename>,还可以通过isinstance(var,typename)判断是不是某类型,包括子类。
print(type(1))//<class 'int'>
print(isinstance(True,int))//True
数据类型分为以下六种,其中前三种不可变
数字类型
由分为
- int
- bool
- float
- complex(复数)
bool类型是int的子类,包括True和False,分别是1和0
字符串
print(type('ee'))//<class 'str'>
元组
在小括号中用逗号分隔的元素,一个元素时需要在后面加逗号和字符串类似
print(type((2,)))//<class 'tuple'>
还有一些其他操作
print (tuple[1:3]) # 输出从第二个元素开始到第三个元素
print (tuple[2:]) # 输出从第三个元素开始的所有元素
print (tinytuple * 2) # 输出两次元组
print (tuple + tinytuple) # 连接元组
列表
类似js中的数组,在中括号中元素用逗号分隔,操作类似元组
print(type([2]))//<class 'list'>
集合
类似js中的Set,元素不重复,在花括号中用逗号分隔或者使用set(),可以将字符串转化为集合
空集合要用后者,因为空的花括号表示字典
print(type({3}))//<class 'set'>
集合之间可以有以下操作
print(a - b) # a 和 b 的差集
print(a | b) # a 和 b 的并集
print(a & b) # a 和 b 的交集
print(a ^ b) # a 和 b 中不同时存在的元素
字典
类似js中的对象,其中key是不可变类型,且唯一
print(type({3:3}))//<class 'dict'>
运算符
这里只介绍需要js没有的或者其他需要注意的
算术运算符
- // 取整除,积向下取整
比较运算符
没有===相关
赋值运算符
无另外注意
位运算符
无另外注意
逻辑运算符
与或非分表表示为
- and
- or
- not
成员运算符
操作数1是否在操作数2(包括字符串,列表或元组)中
- in
- not in
身份运算符
是否为同一个引用,相当于比较地址,地址可用id()获取,这个地址只读
- is
- is not
语句
条件语句
没有switch语法
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
循环语句
循环语句中可以使用continue和break,和js中用法基本一致
- while
while 判断条件(condition):
执行语句(statements)……
带else的while
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
- for语句
for <variable> in <sequence>:
<statements>
else:
<statements>
其中可以使用range()遍历数字序列
range(5)//0到4
range(5,9) //5到8
range(0, 10, 3) //0到9,步长为3
迭代器和生成器
迭代器
迭代器就是js中的iterator,可以通过iter()将字符串,列表或元组转化为迭代器,使用next进行迭代或轮询
list=[1,2,3,4]
it = iter(list)
print(next(it))//1
for i in it:
print(i)//1 2 3 4
生成器
生成器就是js中的generator,是一个返回迭代器的函数,在其中使用yield
函数
函数使用def开头,相当于js中的function,后面跟函数名和参数。
def 函数名(参数列表):
函数体
比如
# 定义函数
def printme( str ):
# 打印任何传入的字符串
print (str)
return
# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")
还可以是匿名函数,即lambda函数
lambda [arg1 [,arg2,.....argn]]:expression
比如
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))
可以使用默认参数,不定长参数等
模块
可以使用import module1[, module2[,... moduleN]将整个模块导入,也可以使用from modname import name1[, name2[, ... nameN]]导入一部分
>>> from fibo import fib, fib2//导入模块 fibo 的 fib 函数
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
或导入所有
from … import *
命名空间和作用域
命名空间
命名空间包括三种
- 局部local 比如函数或类中的
- 全局global 模块中的
- 内置built-in 包含语言内置的名称
作用域
作用域和命名空间对应,其中局部可以嵌套从而分为Local和Enclosing
- local 最内层
- enclosing local和global中间
- global
- build-in
当在内部作用域修改外部作用域的变量时需要另外的关键字,如果外部作用域是全局作用域global关键字,如果外部作用域是enclosing作用域时使用nonlocal关键字,如果不这样就会在内部作用域重新创建一个变量
o=2
print(o) # 2
def outer():
num = 10
print(num) # 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
inner()
global o
o=3
print(num)# 100
outer() #3
print(o)
class
python中的面向对象是以class为基础的,和c++等类似,其中可以包含属性或方法,实例化时直接调用,不能用new调用.
方法中第一个参数为self,表示实例,构造函数为__init__()
私有方法和属性用两个下划线开头__
class ClassName:
<statement-1>
.
.
.
<statement-N>
比如
class MyClass:
"""一个简单的类实例"""
i = 12345
def f(self):
return 'hello world'
# 实例化类
x = MyClass()
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())
继承
支持多继承,可以对继承的方法进行重写
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
完结