Python 中这个 If 条件语句是如何工作的?
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, ' + user.nickname())
else:
self.redirect(users.create_login_url(self.request.uri))
application = webapp.WSGIApplication(
[('/', MainPage)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
我不太明白这一行是怎么工作的:
if user:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, ' + user.nickname())
else:
self.redirect(users.create_login_url(self.request.uri))
我在猜测 users.get_current_user() 是不是返回一个布尔值?如果是这样的话,那它怎么会有 .nickname() 这个方法呢?
谢谢你的指导。
4 个回答
2
users.get_current_user()
这个函数会返回当前用户的信息对象,如果用户没有登录,就会返回 None。 在 Python 里,我们可以用下面的方式来检查一个变量的值是否是 None:
a = None
if not a:
print "a values is None"
3
我怀疑 users.get_current_user()
这个函数会返回一个对象,如果没有当前用户的话,它会返回 None
。在条件判断中,Python会把 None
当作 False
来处理。
不过,要注意的是,用这种方式来检查 None
其实并不是个好习惯,因为其他一些东西,比如空列表 []
也会被当作 False
。所以,代码应该改成这样:
if user is not None:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, ' + user.nickname())
else:
self.redirect(users.create_login_url(self.request.uri))
8
这段代码主要是用来检查 user
是否是一个真实的对象,或者说它是不是 None
。如果 user
是 None
,那么代码就会进入 else
这个部分,然后跳转到一个“创建登录”的页面。