我不明白这两行代码之间的区别

时间:2017-12-12 12:25:34

标签: python python-3.x

我用两种不同的方式编写了这段代码。只有第二个有效,但我不明白为什么。

1:

buttons = Frame(calculator, bg="green", width=200, height=400).grid()
buttons.columnconfigure(0)

2:

buttons = Frame(calculator, bg="green", width=200, height=400)
buttons.grid()
buttons.columnconfigure(0)

3 个答案:

答案 0 :(得分:8)

正如我在评论中所说,我希望这些小代码能让你理解这个问题。

class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        pass

Joe = Person("Joe")
Joe.greet()

Pet = Person("Pet").greet()

print(Joe)
print(Pet)

输出:

<__main__.Person object at 0x7f1020983080>
None

您遇到的问题是Frame构造函数返回Frame类型的对象,而grid方法不返回任何内容。这就是您遇到NoneType错误的原因。

答案 1 :(得分:2)

此:

buttons = Frame(calculator, bg="green", width=200, height=400).grid()
  1. 创建一个Frame对象
  2. 在其上调用.grid()
  3. 将调用结果.grid()绑定到名称buttons
  4. 丢弃Frame对象
  5. 虽然:

    buttons = Frame(calculator, bg="green", width=200, height=400)
    buttons.grid()
    
    1. 创建一个Frame()对象并将其绑定到名称button
    2. .grid()对象上调用Frame()并丢弃此调用的结果。
    3. 所以这两个片段显然不相同。在第一个中,buttons是返回的Frame().grid()(实际上似乎是None),在第二个中,buttonsFrame()对象

      如果要分解第一个语句,则需要一个中间变量(不是buttons)来引用Frame()对象并在此变量上调用grid()

      frame = Frame(calculator, bg="green", width=200, height=400)
      buttons = frame.grid()
      

答案 2 :(得分:1)

它是一样的!你也可以这样做!

buttons = Frame(calculator, bg="green", width=200, height=400).grid().columnconfigure(0)

你可以按行使用多种方法