当前位置 博文首页 > 温故而知新--day1

    温故而知新--day1

    作者:忞翛 时间:2021-01-09 21:02

    温故而知新--day1

    变量类型

    变量是计算机存储数据的内存空间,由于计算机可以处理不同的数据,不同的数据就要定义不同的数据类型。python的数据类型很多,还可以自定义数据类型,常用的一般数据类型有以下几种:

    1. 整型:
      • 在python2版本中有long和int之分,但到了python3中就只有int了。
      • 除此之外,整型还有进制的概念:二进制:0b10表示十进制2,八进制:0o10表示十进制8,十进制:10,十六进制:0x10表示十进制16
    2. 浮点型:
      • 即float,也就是小数,称之为浮点型是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的。
    3. 字符串
      • "'括起来的字符,比如:"hello, world"。
      • 在表示多行字符串时,可以使用三个单引号(''')/双引号(""")括起来
    4. 布尔型
      • 表示的是真或假,通常使用True或False表示。
      • 一些表达式的结果也可以表示真假,如:1 != 2
      • 空的数据类型(""、[]、{})和None0表示False,反之为True
    5. 复数
      • 如3+5j,跟数学上的复数表示一样,唯一不同的是虚部的i换成了j,了解即可。

    函数

    基本概念

    计算机的函数实质上就是一段有特定功能的代码,使用函数可以有效的减少代码的耦合度,同时提高代码的可读性和易维护性。

    函数的写法

    计算机的函数和数学的函数有一定的相似性:

    1. 有参数,相当于数学函数的自变量
    2. 有返回值,相当于数学函数的因变量

    python 的函数使用def关键词定义,需要写上函数名称,而参数值和返回值需要根据需求考虑是否填写。
    如:

    def foo(num):
    	return num + 1

    参数

    前面说过,参数就相当于数学函数的自变量,主要是一些在函数体中用到的值,python的参数可以指定默认的参数。

    def pow(num, count=2):
    	"""计算多少次方"""
    	return num ** count
    	
    if __name__ == "__main__":
    	print(pow(2))		# 4
    	print(pow(2, 3))	# 8

    上面的函数的count参数即指定了默认参数count=2,对于某些对于参数不确定的函数还可以使用不定长参数,其方式一般为*args**kwargs,这两个参数接收的值的类型分别为listdict

    def foo(*args, **kwargs):
        for a in args:
            print(a)
        for k, v in kwargs.items():
            print(k, v)
    
    
    if __name__ == "__main__":
        foo(1, 2, 3, **{"a": 4, "b": 5, "c": 6}, d=7)

    需要注意的是:在传入参数时,可以根据函数参数的位置传参,也可以根据根据参数的关键字传参。二者可以结合使用,但位置参数一定要在关键字参数之前。
    比如对于def foo(a, b, c)来说,既可以foo(1, 2, 3)也可以foo(b=2, a=1, c=3)还可以foo(1, c=3, b=2)但不能foo(c=3, 1, 2)

    返回值

    使用返回值需要用到一个关键词return,一个函数的返回值可以是一个或多个值,也可以是一个函数。

    导入模块

    由于python没有函数重载的概念,所以假如定义了相同函数名的函数时,前一个函数会被后一个函数所覆盖:

    def foo():
    	print("foo1")
    
    def foo():
    	print("foo2")
    

    在日常的开发过程中,假如是一个人开发的话可以为不同的函数取不同的名字,但假如是多人开发的话就有可能使用相同的函数名。多人开发时通常使用模块(module)开发,在使用时可以使用import关键字导入某个指定的模块。
    m1.py:

    def foo():
    	print("foo1")
    	

    m2.py:

    def foo():
    	print("foo2")

    在使用时:

    import m1
    import m2
    
    # 使用
    m1.foo()
    m2.foo()

    需要注意的是:导入模块时会将模块的内容执行一遍,假如不想这样的话,可以使用一个判断语句,使代码主动执行时运行,而不是导入时也运行。

    def foo():
    	print("foo")
    	
    if __name__ == "___main__":
    	foo()

    __name__是Python中一个隐含的变量它代表了模块的名字,只有被Python解释器直接执行的模块的名字才是__main__。

    作用域

    作用域就相当于一个变量可以使用的范围,该作用域的变量只能本作用域和子作用域可用。有了作用域这个概念就有了全局变量和局部变量这两者变量,全局变量即声明在全局作用域中的变量,而局部变量则不是声明在全局的变量,一般来说是一些函数内部声明的变量。

    n = 2	# 全局变量
    
    def foo():
    	m = 3	# 局部变量

    根据python的规则,变量会优先找本作用域的,假如找不到会依次往外找,直至找到,当找不到时就会报错。

    age = 19
    def main():
    	print(age)
    	
    main()

    但假如要修改外部作用域的变量时,必须使用globalnonlocal这两个关键字声明一下,否则报错。因为python会认为修改的这个动作其实是声明,也就是说python没有朝外找变量,假如使用变量在声明变量之前的话,就会报错:UnboundLocalError: local variable 'xxx' referenced before assignment

    # 这是错误的示范
    age = 18
    
    def main():
        print(age)
        age = 20
    
    
    main()
    print(age)

    正确的方法:

    1. global
    age = 18
    
    def main():
        global age
        print(age)
        age = 20
    
    main()
    print(age)

    如果我们希望函数内部的函数能够修改嵌套作用域中的变量,可以使用nonlocal关键字来指示变量来自于嵌套作用域。
    2. nonlocal

    
    
    下一篇:没有了