1、在Python3中运行代码,关于结果正确的是()
dicts = {}
dicts[([1, 2])] = 'abc'
print(dicts)
程序运行过程中会报错:TypeError: unhashable type: 'list'。
因为Python 字典的键必须是可哈希的(即不可变的),而列表 ([1, 2]) 是可变类型,不能作为字典的键。
对上面代码进行修改:
dicts[(1, 2)] = 'abc' # 使用元组代替列表
得到结果为:
{(1, 2): 'abc'}
这里的元组 (1, 2) 是不可变的,因此可以作为字典的键。
小总结:
字典的键要求可哈希,而list不可哈希,会报错。
可哈希对象:数字类型(int,float,bool)、字符串str、元组tuple、自定义类的对象
不可哈希对象:列表、集合和字典
2、下列程序打印结果为( [1, 2, 3, 4, 5, 5, 7] )
nl = [1,2,5,3,5]
nl.append(4)
nl.insert(0,7)
nl.sort()
print nl
append() 方法是指在列表的末尾增加一个数据项。
extend() 方法是指在列表的末尾增加一个数据集合。
insert() 方法是指在某个特定的位置前面增加一个数据项。
sort()是对自己排序,默认升序;sorted()返回一个排序后的副本。
因此:
nl.append(4)得 nl=[1,2,5,3,5,4];nl.insert(0,7)得 nl=[7,1,2,5,3,5,4];nl.sort()输出 [1,2,3,4,5,5,7]
3、映射是一种关联式的容器类型,它存储了对象与对象之间的映射关系。
字典是Python里唯一的映射类型,它存储了键值对的关联,是由键到键值的映射关系。
4、已知print_func.py的代码如下:
print('Hello World!')
print('__name__value: ', __name__)
def main():
print('This message is from main function')
if __name__ =='__main__':
main()
print_module.py的代码如下:
import print_func
print("Done!")
那么,运行print_module.py程序,结果是:
Hello World!
__name__ value: print_func
Done!
import print_func 导入模块时,模块中的代码会被执行。因此,print_func.py 中的代码按顺序运行,输出以下内容:
- Hello World!
- __name__value: print_func
当模块被导入时,__name__ 的值为模块名 (print_func),所以输出是
- __name__value: print_func
然后执行 print_module.py 中剩下的代码: print("Done!") 会输出
- Done!
由于 if __name__ == '__main__': 的部分只在模块被直接执行时才会运行,而不是在导入时运行,因此 print_func.py 中的 main() 函数不会被调用。
其中:
- __name__是一个变量。前后加了双下划线是因为是因为这是系统定义的名字。普通变量不要使用此方式命名变量。
- Python的模块可以独立运行,这点与C++和C的头文件不同。
- import的时候是要执行所import的模块的。
- __name__就是标识模块的名字的一个系统变量。这里分两种情况:假如当前模块是主模块(调用其他模块的模块),那么此模块名字就是__main__,通过 if 判断这样就可以执行“__mian__:” 后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字(不加后面的.py),通过 if 判断这样就会跳过“__mian__:”后面的内容。
小总结:
如果模块是被导入,__name__的值为模块名字
如果模块是被直接执行,__name__的值为’__main__’