我使用以下代码段来读取python中的文件:
with open ("data.txt", "r") as myfile:
data=myfile.readlines()
Run Code Online (Sandbox Code Playgroud)
输入文件是:
LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE
Run Code Online (Sandbox Code Playgroud)
当我打印数据时,我得到了
['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']
Run Code Online (Sandbox Code Playgroud)
我看到数据的list形式.我如何使它成为字符串?而且我怎么删除"\n","["以及"]"从中字符?
在引用全局变量时,可以看到函数和类以不同方式处理它.第一个很好,第二个导致错误:
x = 10
class Foo():
x = x + 1
a = foo()
Run Code Online (Sandbox Code Playgroud)
VS:
x = 10
def faa():
x = x + 1
faa()
Run Code Online (Sandbox Code Playgroud)
在 Python执行模型中,这被描述为:
类定义是可以使用和定义名称的可执行语句.这些引用遵循名称解析的常规规则,但在全局命名空间中查找未绑定的局部变量.
但为什么?
唯一的其他提示我所遇到的是该位:
然后使用新创建的本地命名空间和原始全局命名空间,在新的执行框架中执行类的套件(请参阅命名和绑定一节).(通常,套件仅包含函数定义.)当类的套件完成执行时,其执行帧将被丢弃,但其本地名称空间将被保存.4然后使用基类的继承列表和属性字典的已保存本地名称空间创建类对象.
这仍然没有解释为什么这应该导致在全局命名空间中查找未绑定的本地人.
这两个链接都来自这个答案,虽然没有详细说明原因.
不知怎的,这样做之后
list2 = [x for x in range(10)]
list1 = [ x for x in range(10,20)]
for k, list1 in enumerate([list1,list2]):
for number, entry in enumerate(list1):
print number, entry
Run Code Online (Sandbox Code Playgroud)
突然id(list2)==id(list1)评价为True?究竟发生了什么?当循环运行时,这似乎不是第一个输出符合预期的情况:
0 10,1 1 2,1 12,... 0 0,1 1,2 3,...
第二个虽然给出:
0 0,1 1,2 2 ......
这怎么可能?
只需将代码更改为:
list2 = [x for x in range(10)]
list1 = [ x for x in range(10,20)]
Run Code Online (Sandbox Code Playgroud)
摆脱这种行为.
for k, NEWVAR in enumerate([list1,list2]):
for number, entry in enumerate(list1):
print number, entry
Run Code Online (Sandbox Code Playgroud) 如果我定义一个简单的类
class someClass():
var = 1
x = someClass()
someClass.var = 2
Run Code Online (Sandbox Code Playgroud)
这将使x.var等于 2。这是令人困惑的,因为通常类似于这样的东西:
a = 1
b = a
a = 2
Run Code Online (Sandbox Code Playgroud)
将保持 b 完好无损b==1。那么为什么这与类变量不同呢?区别在哪里?可以调用所有类变量可变吗?在某种程度上,类变量的工作更像是将列表分配给a=[1]并执行a[0]=2.
基本上问题是如何x.var访问 someClass.var 它必须是不同的,然后在 python 中将两个变量设置为相等时使用。怎么了?