Python基础入门第三课--变量、函数概述

    从现在开始嘞,我们就开始进入Python的基础学习,记得有本关于数据库的书叫做《SQL必知必会》,很薄但是内容很充实,看了至少不下三遍。我在这里也斗胆称我们这个为“Python必知必会”吧。

注意:在HTML/XML编辑器里面生成的python代码会有类似<span style="color:#333333;">的标签语言,这部分不在代码里面,请自动忽略。

1.变量

    众所周知,python是从C语言那里演化过来的,所以它的变量和c语言的基本差不多。我们常用的,全局变量、局部变量、静态变量、实例变量。

   1. 全局变量

       一般情况下,函数直接调用全局变量,如果对全局变量没有任何操作,都没有问题。但是如果有更新操作,但是在函数体内没有声明的话,相当于在函数体内创建了一个和全局变量名称相同的局部变量。会出现令你惊喜的问题。

Remember:局部变量的优先级是高于全局变量的。

Example:

#coding:utf-8
#author:youzi
all_var="Hello World!"  #全局变量声明
def Test():
   global all_var  #global告知函数体这个为全局变量
   print all_var   #打印变量
Test()
print all_var

Another Example(Error):

#coding:utf-8
#author:youzi
all_var=8  #全局变量声明
def Test():
   all_var=0 #修改变量的值,但是不声明为全局变量
   print all_var   #打印变量
Test()
print all_var

自己去测试一下上面这两个代码,体会一个全局变量的作用域。你会有一些初步的感触。

   2. 局部变量

在函数体内的一个小可爱,也只能在函数体内发生作用,出去了就没有可爱的属性了。

Example: 

#coding:utf-8
#author:youzi
def Cute():
  name="youzi"
  print name
Cute()

   3.静态变量和实例变量

静态变量和实例变量概念放到类里面叙述比较好一点,请先看下面的代码(只需关注红色和蓝色部分即可):

class Province(object): #创建一个类,类名为Province
    memo='中国的23个省之一'#静态字段
    #实例
    def __init__(self,name,captial,leader,flag):#方法
        self.Name=name
        self.Captial=captial
        self.Leader=leader#动态字段
        self.__Thailand=flag#私有字段
#动态方法
    def sports_meet(self):
        return self.Name + '正在开运动会'
#将动态方法改为静态方法
    @staticmethod
    def Foo():
        print('省要带头反腐')
#将动态方法改为特性
    @property
    def Bar(self):
        print(self.Name)
    #利用动态方法去调用私有字段只读
    @property
    def Thailand(self):
        return self.__Thailand
    @Thailand.setter
    def Thailand(self,value):
        self.__Thailand=value

hb=Province('河北','石家庄','李阳','True')
sd=Province('山东','济南','王胜辉','False')
japan=Province('日本','冲绳','苍井空','True')

print(hb.Captial)#对象可以访问动态字段
print(Province.memo)#类可以访问静态字段
print(sd.memo)#对象也可以访问静态字段
print(sd.Name)#对象可以访问动态字段
print(hb.sports_meet())#对象可以访问动态方法
print(sd.sports_meet())#对象可以访问动态方法
Province.Foo()#类可以访问静态方法
hb.Bar#特性访问
print(japan.Thailand)#只读特性访问
japan.Thailand=False
print(japan.Thailand)

    首先,我们创建了一个名字为Province的类,在这个类里面我们可以初始化我们想要的任何省份。并且执行一些相应的操作达到自己的需要。

    其次,memo为我们创建的一个静态字段,也成为静态变量。而sd是我们为了实例化Province类创建的一个对象,为什么要实例化Province类并创建一个对象呢?为了实现面向对象编程的思想,为了调用类里面我们写一些很实用的方法。从而在后面的打印部分可以看到,memo这个静态字段是属于类Province、属于对象sd。也就是说我们可以通过类和对象去调用它。

    最后,我们关注蓝色部分的内容,我们称它为动态字段,利用初始化函数中的self参数去调用它,self.Leader,这也是我们经常所说的实例变量。实例变量属于对象,通过对象可以调用动态字段也就是实例变量。对于静态字段或者静态变量来说,没有self.静态字段这样的说法,同时,类也不能调用动态字段。特别要注意,如果要这样调用会抛出属性异常(Attribute Error)。

   4.Summary

    在编写代码过程中,变量的处理一般会分为这两种情况:公有和私有。不和其它的部分进行共享,自己独享。就像数据库里面的排它锁类似,一个函数体的局部变量,一个具体类的动态字段或实例变量都是私有的,不共享。在一定范围和域里面共享,达到同步目的,共享的全局变量,父类和子类之间共享的静态字段或静态变量等。

    在实现某个具体功能的编程中,对具体变量的分类是很重要的,在某种程度上反映了你对这个功能的掌握、对代码架构的设计的认识。总之,不要忽视实现功能编程的每一步。

2.函数

    函数就像小型程序一样,可以用来实现特定的功能,Python有很多函数,它们能做很多奇妙的事情,你也可以自定义函数。因此,我们通常会把pow等标准函数成为内建函数,而把用户自己编写的函数成为第三方函数或者自定义函数,总之在标准库里面找不到对应名称的函数。

   1.定义函数

    创建函数是组织程序的关键,那么怎样定义函数呢?使用def(或“函数定义”)语句即可。

def hello(name):
   return 'Hello.' + name + '!'
print hello('World')
print hello('Youzi')

    运行这段程序就会得到一个名为hello的函数,它可以返回一个将输入参数作为名字的问候语句,可以像使用内建函数一样使用它,给相应的参数,打印输出就可以了,print就是一个最基础的Python的内建函数。再来看一个例子:

def fibs(num):
  result=[0,1]
  for i in range(num-2):
     result.append(result[-2]+result[-1])
   return result

    这个例子相信大家并不陌生,这是典型的斐波那契数列的处理算法,执行这段语句后,编辑器都知道如何计算斐波那契数列了,所以现在基本上就不用关注谢姐了,只要用函数fibs就可以了。关注一下pass这个小东西。

def no():
   pass

    pass语句就是什么都不用做,什么也都不处理。实际上只可以用来做占位符使用的。如果你写到一个具体的函数,函数的具体功能和上下文都有关,你还没有想好要怎样写。就可以填入pass,不会影响程序的执行。pass还可以用在下面这个小细节。

if time_of_study >=24:
      pass

    劳逸结合才是最好的学习方式,学习的时间超过24小时,emmmmm.......歇息歇息,什么都不做,什么都不处理。但是不能为空,否则就会出现语法错误。

   2.调用函数

函数的调用其实很容易理解,特别是对于标准库里面的函数来说更是方便操作,对于自己定义的函数我们调用时候注意传入正确的参数即可。直接来看几个例子就可以体会到。

>>>from math import sqrt
>>>sqrt(9)
3.0
>>>sqrt(9,10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sqrt() takes exactly one argument (2 given)

    上述程序在shell里面执行,从math库里导入sqrt,标准开方函数。首先执行正确的参数传入得到正确的结果,接着传入有误的参数,也就是错误调用,解释器会告诉你这有一个TypeError,sqrt()函数只有一个参数,而你传入了两个。

    下面也是一些常用的函数调用,熟悉熟悉便可:

>>>int('1234567')
1234567
>>>str(1234567)
'1234567'
>>>bool('1')
True
>>>bool('')
False
>>>float(1)
1.0

    函数这部分先就介绍这么多,往后我们还会介绍到递归、函数和字典、列表、类等的结合使用。以及一些在标准库里面精彩的内建函数。


猜你喜欢

转载自blog.csdn.net/qq_34454366/article/details/80147868