python变量不需要预先声明,初次赋值即为定义(根据赋值类型决定变量的类型);但引用前必须保证变量已定义。已定义的变量可通过del(del var)来删除,删除后就不能在引用了。
python按如下顺序查找变量:当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量。
python中定义了六种标准数据类型:
数字:int、float、bool(True、False)、complex;
字符串:str;
+:连接字符串;
*:多次复制字符串,'12'*3为'121212';
列表:list,[a,b...]
元组:tuple,(a,c...)
集合:set,
字典:dict,
{}:是创建空字典,创建空集合只能通过set();
变量类型判断,python提供内置函数用于类型判断:
type(var):获取变量类型;
isinstance(var, type):判断是否为指定类型;
type不处理继承关系;判断子类型是否为父类型,需要使用isinstance。
字符串:python3中字符串使用Unicode编码
单引号:可包含双引号;
双引号:可包含单引号;
三引号(三个单或双引号):可以跨多行(可用作注释);
raw字符串:以r开始,使转义失效(r"test\wend"),在正则表达式中非常有用;
长字符串拆行(太长,需要多行表示),可通过:
三引号:会引入换行符;
使用'\':在行尾使用\表示有更多行;
使用括号括起多个字符串:不只用于字符串,也可用于其他语句的分行(()[]{}括起的语句,可直接跨多行):
words = 'cats dog'\
' monkey'
animal = ('cat '
'dog')
if ( words is None
and animal is not None): #括号是必须的
全局变量
在函数中定义的变量默认都是局部变量,若要使用全局变量,则需要通过global关键字引入;内置函数可获取当前变量:
globals():全局变量字典;
locals():局部变量字典;
x='global' #即使没有定义,函数内部通过global引用也正确(会自动生成一个全局的)
def localFun():
global x #必须有此引入语句,否则后面的x会作为局部变量
x='local'
print(x)
localFun() // local
print(x) // local,若函数内部没有通过global引入,则为‘global
global虽然可以在函数内部引入全局变量,但是在跨文件时还是无能为力,为此我们需要通过函数来实现,如定义一个专门的全局变量管理文件:
def _init():#初始化
global _global_vars
_global_vars = {}
def set_value(key,value):
""" 定义一个全局变量 """
_global_vars[key] = value
def get_value(key,defValue=None):
""" 获得一个全局变量,不存在则返回默认值 """
try:
return _global_vars[key]
except KeyError:
return defValue
外层(作用域)变量
nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。以生成一个计数器为例:
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
mc = make_counter()
print(mc()) #1
print(mc()) #2
其与下面代码等价:
def gen_counter():
count = 0
while True:
count += 1
yield count
gc = gen_counter()
print(next(gc))
print(next(gc))
领取专属 10元无门槛券
私享最新 技术干货