知识点1:Python 合法的标识符
参考链接:哪个不是python合法标识符
具体基础知识点如下:组合=字母+数字+下划线
-
第一个字符不能以数字开头。
-
从第二个字符开始可以是字母,数字和下划线。
-
大小写敏感。
-
Python的保留关键字不能作为标识符。
具体关键字如下:
- 不建议使用python的内建名字集合当作标识符。
Python提供了keyword模块来查询关键字集合和判断一个字符串是否是python的关键字:
Python的合法标识符
下面这段代码可以让用户输入一个字符串,然后判断是否是合法的python标识符,如果不是继续输入,直到输入正确,程序退出。
主要利用知识点中的1,2,4来判断。
以下代码为python3,上述参考链接里面为python2。
import keyword
import string
def is_valid_py_name(py_name):
py_name = py_name.strip()
if keyword.iskeyword(py_name):#判断关键字
print("'{0}' is a python keyword! It is a invalid letter!".format(py_name))
return False
elif py_name == "":#判断空
print("empty input!")
return False
elif py_name[0] not in (string.ascii_letters+'_'):#判断第一个字母是否是以"-"或字母开头
print("'{0}' not start with _ or letter!".format(py_name))
return False
else:
for i in range(1,len(py_name)):#从第二字符开始,遍历字母(包括大小写)和数字
if py_name[i] not in (string.ascii_letters+'_'+string.digits):
print("'{0}' is invalid letter!".format(py_name[i]))
return False
print("'{0}' is valid py name!".format(py_name))
return True
if __name__ == "__main__":
#is_valid = False
#while not is_valid:
while True:
print("Please enter a string:")
py_name = input()
is_valid = is_valid_py_name(py_name)
修改代码
python2 string.letters:包含所有字母(大写或小写)的字符串
Python 3中,string.ascii_letters.
例题:
逐个测试,测试结果如下。
知识点2:字典声明的办法总结
字典基本知识:
字典本身是可变数据类型,字典的键记住两点:
唯一:同一个字典中的键必须唯一,如果出现多个相同的键,则最新的键会被记住(也即值会被代替);
不可变:键是不可变数据类型,使用可以是int,string,float,tuple
Python中的数组可分为:元组tuple(a,b)不可变数据类型,列表list[a,b]可变数据类型,字典dict{a:b}值可以改变。
例题:
解题过程:
一个对象能被称为 hashable , 它必须有个 hash 值,这个值在整个生命周期都不会变化,而且必须可以进行相等比较,所以一个对象可哈希,它必须实现__hash__() 与 eq() 方法。
对于 Python 的内建类型来说,只要是创建之后无法修改的(immutable)类型都是 hashable 如字符串,可变动的都是 unhashable的比如:列表、字典、集合,他们在改变值的同时却没有改变id,无法由地址定位值的唯一性,因而无法哈希。我们自定义的类的实例对象默认也是可哈希的(hashable),而hash值也就是它们的id()。
“is测试”基于id()的值。
"==测试” 基于hash()的值。
实例:初始化字典,26个小写英文字母,从0到25.
知识点3:理解:if name ==‘main’:
例子:
运行程序,先调用,后执行后面的语句。
于是先打印出Hello World,紧接着打印出
__name__value:print_func
但是不执行main()函数
然后打印出Done!
当哪个模块被直接执行时,该模块“name”的值就是“main”,当被导入另一模块时,“name”的值就是模块的真实名称
修改print_module.py最后一行代码为print(’__name__value:’,name),输出如下: