天才教育网合作机构 > 编程语言培训机构 > Python培训机构 >

天才领路者

欢迎您!
朋友圈

400-850-8622

全国统一学习专线 9:00-21:00

位置:编程语言培训资讯 > Python培训资讯 > 终于清楚python中变量如何定义

终于清楚python中变量如何定义

日期:2019-08-25 12:16:16     浏览:161    来源:天才领路者
核心提示:python是一门弱类型语言(我猜的),不像C/C++、Java这些语言,在定义变量的时候必须声明其类型,而python变量不需要声明是什么类型,可以直接使用,但是在使用之前必须初始化。那么python中变量如何定义呢?一起来了解下吧: p
python是一门弱类型语言(我猜的),不像C/C++、Java 这些语言,在定义变量的时候必须声明其类型,而python变量不需要声明是什么类型,可以直接使用,但是在使用之前必须初始化。那么python中变量如何定义呢?一起来了解下吧:   python中变量如何定义  

python中变量如何定义

  Python中变量是不需要预先定义变量类型。   即使是变量名相同而值不同,那么它是两个变量。   var=123   print (var)   vars(不带参数的形式)和locals这两个内建函数返回一个当前scope内定义的所有局部变量的字典。>>>'a' in vars() False>>> a = 1>>>'a' in vars()True>>> b = 2>>> locals()   变量定义方法很简单:   x = 5   这个操作过程就是赋值,意思把整型数字5赋值给了变量x,用等号来连接变量名和值。之后就可以在表达式中使用这个新变量了。   x * 3   15   注意:在赋值时,值是什么数据类型,就决定了这个变量的类型,变量名引用了数值的同时也引用了它的类型。   变量命名规范   1、变量名可以包括字母、数字、下划线,但是数字不能做为开头。例如:name1是合法变量名,而1name就不可以。   2、系统关键字不能做变量名使用   3、除了下划线之个,其它符号不能做为变量名使用   4、Python的变量名是除分大小写的,例如:name和Name就是两个变量名,而非相同变量哦。   Python如何定义静态变量   众所周知,Python语言并不支持静态变量,比如下面这样一个应用场景   void foo() {   static int count = 0;   count ++;   }   在Python中无法自然实现这个功能。换个角度来看这个问题,函数中的静态变量其实可以看做是函数的一个内部变量,而不是调用期间生成的局部变量。所以这里介绍一种使用装饰器的方法给函数添加这样的内部变量。   def static_vars(**kwargs):   def decorate(func):   for k in kwargs:   setattr(func, k, kwargs[k])   return func   return decorate   这是一个Python装饰器,通过@语法调用,在一个函数外层再包裹一层,这里相当于给函数添加内部变量。可以这样来使用这个装饰器,比如我们想实现上面的想法,在foo函数中添加一个计数器,有   @static_vars(counter = 0)   def foo():   foo.counter += 1   其实如果一定要通过内部变量来实现静态的效果,可以直接定义类来达到,但是装饰器将很多细节略去,而且通过**kwargs可以添加任意类型,任意数目,实现起来相对简单。   python私有变量如何定义    变量前加双下划线(只前缀双下划线),将被认为是私有变量,单下划线开头的成员变量和成员函数,其实就是public的,在类外不能访问,否则认为是公有的变量。         Python中默认的成员函数、成员变量都是公开的(public),而且python中没有类似public、private等关键词来修饰成员函数,成员变量。         在python中定义私有变量只需要在变量名或函数名前加上 "__" (两个下划线),那么这个函数或变量就会成为私有的了。   ——————————————————————————————————————————   class aa:           'descript class aa'           __x = 12           def __init__(self):                   print 'aa init....'                   self._name = 'jeapedu'           @classmethod           def p(cls):                   print 'class method?'           def getname(self):                   return self._name           def setname(self, v):                   self._name = v           name = property(getname, setname,fdel = None, doc = "propertyTest")   class bb(aa):           y = 13           def __init__(self):                   print 'bb init....'                   aa.__init__(self)   a = aa()   aa.p()   a.name = 'Jeapedu'   print a.name   print aa.__dict__   print a.__x   b = bb()   print "b.y, bb.y", b.y, bb.y   print bb.__dict__   #print b.__x,  # 双下划线__x,是父类aa的私有变量,子类不可访问   ——————————————————————————————————————————     运行结果   aa init....   class method?   Jeapedu   {'__module__': '__main__', '_aa__x': 12, 'name': , 'setname': , 'getname': , 'p': , '__doc__': 'descript class aa', '__init__': }   bb init....   aa init....   b.y, bb.y 13 13   {'y': 13, '__module__': '__main__', '__doc__': None, '__init__': }   <<< Process finished. (Exit code 0)   ——————————————————————————————————————————         比较奇怪的是x前后有双下划线上边程序注释掉的语句可以执行,原因是前后双下划线的是给系统用的,用户一般不要定义这样的变量比较好!前后缀双下划线变量。        而前缀单下划线的变量是python普通变量。   Python中设置变量访问权限的方法   在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。   但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性:   >>> bart = Student('Bart Simpson', 98)   >>> bart.score   >>> bart.score = 59   >>> bart.score   59   如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Student类改一改:   class Student(object):    def __init__(self, name, score):     self.__name = name     self.__score = score    def print_score(self):     print '%s: %s' % (self.__name, self.__score)   改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.__name和实例变量.__score了:   >>> bart = Student('Bart Simpson', 98)   >>> bart.__name   Traceback (most recent call last):    File "", line 1, in   AttributeError: 'Student' object has no attribute '__name'   这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。   但是如果外部代码要获取name和score怎么办?可以给Student类增加get_name和get_score这样的方法:   class Student(object):    ...    def get_name(self):     return self.__name    def get_score(self):     return self.__score   如果又要允许外部代码修改score怎么办?可以给Student类增加set_score方法:   class Student(object):    ...    def set_score(self, score):     self.__score = score   你也许会问,原先那种直接通过bart.score = 59也可以修改啊,为什么要定义一个方法大费周折?因为在方法中,可以对参数做检查,避免传入无效的参数:   class Student(object):    ...    def set_score(self, score):     if 0 <= score <= 100:      self.__score = score     else:      raise ValueError('bad score')   需要注意的是,在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名。   有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。   双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量:   >>> bart._Student__name   'Bart Simpson'   但是强烈建议你不要这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名。   总的来说就是,Python本身没有任何机制阻止你干坏事,一切全靠自觉。  
如果本页不是您要找的课程,您也可以百度查找一下: