寒假自学(三)

希望所有温柔又可爱的人最后都能幸福❤

今日总结:

代码量 200行
博客量 一篇
所学时间 4小时左右
了解到的知识点 python语法进阶

明日计划:

早上 python面向对象基础
下午 python面向对象基础
晚上
具体内容:
变量进阶
  • 变量数据都是保存在内存中的
  • python中函数的参数传递以及返回值都是靠引用传递的

如果变量已经被定义,当给一个变量赋值的时候,本质上是修改了数据的引用

  • 变量不再对之前的数据引用
  • 变量改为对新赋值的数据引用

使用id()函数查看变量地址

def test(num):
    print("在函数内部 %d 对应的内存地址是 %d" % (num, id(num)))
    result = "hello"
    print("函数要返回数据的内存地址是 %d" % id(result))
    return result


a = 10

print("a 变量保存数据的内存地址是 %d" % id(a))

r = test(a)

print("%s 的内存地址是 %d" % (r, id(r)))

  • 可变和不可变类型
    • 不可变类型,内存中的数据不允许被修改
      • 数字类型,int,bool,float,complex,long(2,x)
      • 字符串str
      • 元组tuple
    • 可变类型,内存中的数据可以被修改:
      • 列表list
      • 字典dict

字典的key只能使用不可变类型的数据

哈希(hash)

python中的hash只能接受一个不可变类型的数据作为参数

  • 键值对的key必须是不可变类型数据
  • 键值对的value可以是任意类型的数据

局部变量全局变量

  • 局部变量的生命周期
    • 生命周期是指变量被创建被系统回收的过程
    • 局部变量函数执行时才会被创建
    • 函数执行结束后局部变量被系统回收
    • 局部变量在生命周期内,可以用来存储函数内部临时使用到的数据
  • 全局变量
    • 在函数内部,可以通过全局变量的引用获取对应的数据
    • 但是,不允许直接修改全局变量的引用--使用赋值语句修改全局变量的值

在函数内部修改全局变量的值需要使用global进行声明

num = 1


def demo():
    global num

    num = 99
    print("demo ==> %d" % num)


def demo2():
    num = 99
    print("demo ==> %d" % num)


demo2()
print("demo ==> %d" % num)
demo()

在有些公司中,要求在定义全局变量时增加g_或者gl_的前缀

多个返回值

def measure():
    print("测量开始...")
    temp = 39
    wetness = 50
    print("测量结束...")

    # 如果返回的是元组,小括号可以省略
    return temp, wetness


result = measure()
print(result)

print(result[0])
print(result[1])

gl_temp, gl_wetness = measure()
print(gl_temp)
print(gl_wetness)

append方法

def demo(num_list):
    print("函数内部的代码")
    num_list.append(9)
    print(num_list)
    print("函数执行完成")


gl_list = [1, 2, 3]
demo(gl_list)
print(gl_list)

函数的缺省参数定义

def print_info(name, gender=True):
    """

    :param name: 姓名
    :param gender: 性别True 男生 False 女生
    """
    gender_text = "男生"

    if not gender:
        gender_text = "女生"

    print("%s 是 %s" % (name, gender_text))


print_info("小明")
print_info("小肖", False)

多值参数

定义支持多值参数的函数

  • 有时可能需要一个函数能够处理的参数个数是不确定的,这个时候,就可以使用多值参数
  • python中有两种多值参数:
    • 参数名前增加一个*可以接收元组
    • 参数名前增加两个*可以接收字典
  • 一般在给多值参数命令时,习惯使用以下两个名字
    • *args--存放元组参数,前面有一个*
    • **kwargs--存放字典参数,前面有两个*
  • argsarguments的缩写,有变量的含义
  • kwkeyword的缩写,kwargs可以记忆键值对参数
def demo(num, *nums, **person):
    print(num)
    print(nums)
    print(person)


demo(1, 1, 2, 3, 4, 5, name="小明",age = "18")

多值参数

def sum_numbers(*args):
    num = 0
    for i in args:
        num += i
    print(args)
    return num


result = sum_numbers(1, 2, 3, 4, 5)
print(result)

递归

  • 一个函数内部自己调用自己
    • 函数内部可以调用其他函数,当然在函数内部也可以调用自己
    • 需要指定递归出口,避免死循环
def sum_number(num):
    print(num)
    if num == 0:
        return
    sum_number(num - 1)


sum_number(3)
def sum_number(num):
    if num == 1:
        return 1
    temp = sum_number(num - 1)
    return temp + num


print(sum_number(100))
posted @ 2021-01-05 23:58  DemonSlayer  阅读(62)  评论(0编辑  收藏  举报