V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuanwu
V2EX  ›  分享发现

木兰重生:与 Python 生态的兼容问题;字符串插值

  •  
  •   xuanwu · 2020-10-08 11:47:19 +08:00 · 672 次点击
    这是一个创建于 1297 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文链接:木兰重生:与 Python 生态的兼容问题;字符串插值

    节选:

    前两天用木兰调用 pygame 库实现了个井字棋棋盘界面。期间遇到了一些问题,先小结一下。

    1 生态兼容问题

    注:解决方法限于个人至今对木兰和 Python 的了解。如有高招,烦请指教!

    1.1 元组 ( tuple )

    python 中很常用的结构,可以如下初始化:

    >>> t = (1,2)
    >>> t
    (1, 2)
    >>> t = 2, 3
    >>> t
    (2, 3)
    

    但木兰中好像没找到类似的简便方法。幸好与 python 相似,函数返回多项时就会打包成元组,因此暂时这样定义函数:

    func 多项 2(a, b) {
      return a, b
    }
    func 多项 3(a, b, c) {
      return a, b, c
    }
    ...
    

    之后支持变长参数时,就可以合并为一个函数了。

    1.2 如何引用 type 属性

    下面是 pygame 的常见操作,检查 pygame.event 的 type:

    			for event in pygame.event.get():
    				if event.type == pygame.QUIT :
    

    但木兰中的 type 是类型定义的关键词,因而如果仍使用 .type 会报错。刚遇到这一问题时,颇为震惊,以为发现了木兰的一个大硬伤,不过还好 python 还有一个 __getattribute__('type') 可用。但另一种方法用在这里就无法获得 type 值:

    func getType(个体) {
      for 属性, 值 in 个体.__dict__.items() {
       return 值 if 属性 == 'type'
      }
    }
    

    大概因为这个 type 是个 @property (木兰中的应变属性),那么如果是普通属性如下:

    type 人 {
        func $人(名) {
            $type = 名
        }
    }
    

    上面两种方法就都可用。

    1.3 键 in 字典

    ......

    完整内容见原文链接:木兰重生:与 Python 生态的兼容问题;字符串插值 (降权,发不起完整的)

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   905 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:57 · PVG 03:57 · LAX 12:57 · JFK 15:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.