python的for语句中i未被定义_python 报错 类名没有被定义

写了图片中一个类,脚本中声明对象没有报错,但是在console中声明时却报错类名不存在。很疑惑,望能解答,各位大佬补上代码:#!/usr/bin/envpython#-*-coding:utf-8-*-classOthelloSt...

写了图片中一个类,脚本中声明对象没有报错,但是在console中声明时却报错 类名不存在。很疑惑,望能解答,各位大佬

补上代码:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

class OthelloState:

def __init__(self,sz = 8):

""" czhhbp: bulld game board,sz display the board size:sz*sz square

"""

self.playerJustMoved = 2 # At the root pretend the player just moved is p2 - p1 has the first move

self.board = [] # 0 = empty, 1 = player 1, 2 = player 2

self.size = sz

assert sz == int(sz) and sz % 2 == 0 # size must be integral and even

for y in range(sz):

self.board.append([0]*sz)

tmp=int(sz/2)

self.board[tmp][tmp] = self.board[tmp-1][tmp-1] = 1

self.board[tmp][tmp-1] = self.board[tmp-1][tmp] = 2

def Clone(self):

""" Create a deep clone of this game state.

"""

st = OthelloState()

# st.playerJustMoved = self.playerJustMoved

st.board = [self.board[i][:] for i in range(self.size)]

st.size = self.size

return st

b=OthelloState()

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Python ,`from __future__ import annotations` 语句是用来引入 Python 3.7 引入的类型注解功能的。这个语句允许你在程序声明变量或函数的类型,并由编译器或其他工具来检查代码的类型是否正确。 例如,你可以在函数的参数列表声明参数的类型,或者在函数的返回语句声明函数返回的类型。这样做的好处是可以提高代码的可读性,并且有助于发现类型错误。 例如: ``` from __future__ import annotations def add(x: int, y: int) -> int: return x + y ``` 在这个例子,我们声明了函数 `add` 的两个参数 `x` 和 `y` 都是整型,并且函数的返回值也是整型。 需要注意的是,`from __future__ import annotations` 语句仅在 Python 3.7 及更高版本有效,如果你使用的是更低版本的 Python,则需要使用其他方法来声明变量或函数的类型。 ### 回答2: 在Python,`from __future__ import annotations`是一种特殊语法,用于启用PEP 563引入的在类型注释进行延迟评估的功能。 在Python,类型注释是一种为变量、函数参数和返回类型等添加类型信息的方法。然而,在Python 3.7及之前的版本,类型注释只能使用来自导入模块的类、函数和变量的字符串名称。这意味着,如果在类型注释引用未定义的类或函数,或者在类定义之前引用类型注释,则会导致错误。这种限制限制了类型注释的灵活性和表达能力。 通过添加`from __future__ import annotations`语句,可以关闭Python解释器的旧的类型注释执行模式,并使用新的延迟评估模式。在新的模式下,类型注释使用字符串名称和变量本身的字符串位置,而不是相应的模块和变量。 使用`from __future__ import annotations`的好处是,可以在类型注释直接引用未定义的类型,而无需担心引用错误。同时,它还允许在类定义之前引用类型注释,这对于处理循环引用的类结构尤其有用。 例如,假设有两个类A和B,它们相互引用,如果在类A的类型注释引用类B,而在类B的类型注释引用类A,那么在旧的类型注释执行模式下将会报错。但是,在使用`from __future__ import annotations`之后,可以在两个类的类型注释使用相互引用的类名,而不会产生错误。 因此,`from __future__ import annotations`在Python的作用是启用新的类型注释执行模式,提供更灵活和强大的类型注释功能,尤其在处理循环引用的类结构时有很大的帮助。 ### 回答3: 在Python,`from __future__ import annotations`是用来在较旧版本的Python引入后续版本的特性的一种机制。 在Python 3.7之前,当我们在一个类定义使用类型提示时,我们无法在类型提示引用该类本身。这意味着我们不能在类定义的方法使用该类作为参数类型注解或返回值注解。这是因为在解析类定义时,类本身尚完全定义,因此并不存在一个已经存在的类。 然而,从Python 3.7开始,我们可以使用`from __future__ import annotations`语句引入"延迟评估注解"的特性。这意味着在类定义的类型注解会被视为字符串,并将在运行时动态求值,而不是在解析时静态求值。这样,我们就可以在类定义使用该类自身作为参数类型注解或返回值注解。 这个特性的引入使得代码更加可读,并提供了更强的类型安全性。它还允许我们更自然地表示复杂的类型关系,例如在一个类使用嵌套的泛型或递归类型注解。 需要注意的是,`from __future__ import annotations`语句必须放在文件的开头。如果不引入这个特性,类型注解将仍然被视为字符串,并且在运行时不会被动态求值。 总之,`from __future__ import annotations`在Python的作用是为了引入"延迟评估注解"特性,使得在类定义可以使用该类自身作为参数类型注解或返回值注解,提供更好的代码可读性和类型安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值