码迷,mamicode.com
首页 > 编程语言 > 详细

Python 基础(二)

时间:2018-03-06 00:51:19      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:ref   关键字   keyword   上传   htm   设置   资料   inf   ret   

1. 变量进阶

1.1 变量的引用

  • Python 中,变量数据是分开存储的;
  • 数据保存在内存中的一个位置;
  • 变量中保存着数据在内存中的地址;
  • 变量中记录数据的地址,叫做引用;
  • 使用 id() 函数可以查看变量中保存数据所在的内存地址;

1.2 函数的参数和返回值的传递

def test(num):

    print("在函数内部 %d 对应的内存地址是 %d" % (num, id(num)))

a = 10

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

# 调用函数,本质上传递的是实参保存数据的引用, 而不是实参保存的数据
# 函数的返回值,本质上返回的是数据的引用,而不是数据本身
test(a)

1.3 可变和不可变数据类型

  • 不可变类型:
    • 数字类型 int,bool,float,complex
    • 字符串 str
    • 元组 tuple
  • 可变类型:
    • 列表 list
    • 字典 dict

1.4 局部变量和全局变量

  • 局部变量: 在函数内部定义的变量,只能在函数内部使用;
  • 全局变量: 在函数外部定义的变量,所有函数内部都可以使用这个变量;
    • 在函数内部,可以通过全局变量的引用获取对应的数据;
    • 但是,不允许直接修改全局变量的引用(即使用赋值语句修改全局变量的值);
    • 为了避免局部变量和全局变量出现混淆,全局变量的名称前应该增加 g_gl_的前缀;
# 示例一
num = 10

def demo1():

    # 如果使用赋值语句,会在函数内部,定义一个局部变量
    num = 99
    print("demo1 ==> %d" % num)

def demo2():

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

demo1() # 输出结果: demo1 ==> 99
demo2() # 输出结果: demo2 ==> 10


# 示例二: 在函数内部修改全局变量的值
# 需要使用 global 关键字进行声明
num = 10

def demo1():

    # global 关键字,告诉 python 解释器, num 是一个全局变量
    global num

    num = 100

    print("demo1 ==> %d" % num)

def demo2():

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

demo1() # 输出结果: demo1 ==> 100
demo2() # 输出结果: demo2 ==> 100

2. 函数进阶

2.1 函数的返回值

# 示例一: 利用元组返回多个值
# 需求: 测量温度和湿度
def measure():
    """测量温度和湿度"""

    print("测量开始...")
    temp = 39
    wetness = 35
    print("测量结束...")

    # 如果函数返回的类型是元组, 小括号可以省略
    # return (temp,wetness)
    return temp, wetness


result = measure()
print(result)

# 如果需要单独的处理温度或者湿度,可以使用多个变量, 一次接收函数的返回结果;
# 注意: 使用多个变量接收结果时, 变量的个数应该和元组中元素的个数保持一致;
gl_temp, gl_wetness = measure()

print(gl_temp)
print(gl_wetness)


# 示例二: 交换两个数字
#  要求: 1. 有两个整数变量 a = 6, b = 100
#       2. 不使用其他变量, 交换两个变量的值

# 方法一:
a = a + b
b = a - b
a = a - b

# 方法二: Python 专有, 利用元组
# a, b = (b, a)
a, b = b, a

2.2 函数的参数

# 列表变量调用 += 本质上是在执行列表变量的 extend 方法

def demo(num, num_list):

    print("函数内部代码")

    num += num

    num_list += num_list

    print(num)
    print(num_list)
    print("函数代码完成")

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

2.4 函数的缺省参数

  • 定义函数时, 可以给某个参数指定一个默认值, 具有默认值的参数就叫做缺省参数;
  • 调用函数时, 如果没有传入缺省参数的值, 则在函数内部使用定义函数时指定的参数默认值;
  • 函数的缺省参数, 将常见的值设置为参数的缺省值, 从而简化函数的调用;
  • 缺省参数的注意事项:
    • 缺省参数的定义位置:带有默认值的缺省参数,定义在参数列表末尾;
    • 调用带有多个缺省参数的函数时,需要指定参数名;
# 示例一: 对列表排序的方法
gl_list = [1, 8, 3, 2]

# 默认就是升序排序, 因为这种应用需求更多
gl_list.sort()
print(gl_list)

# 只有当需要降序排序时, 才需要传递 reverse 参数
gl_list.sort(reverse=True)
print(gl_list)


# 示例二: 指定函数的缺省参数
def print_info(name, gender=True):

    gender_text = "男生"
    if not gender:
        gender_text = "女生"

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

2.5 多值参数

  • 当一个函数能够处理的参数个数是不确定的时候,就可以使用多值参数;
  • Python 中有两种多值参数:
    • 参数名前增加一个 *可以接收元组;
    • 参数名前增加两个 *可以接收字典;
  • 一般在给多值参数命名时,习惯使用以下两个名字:
    • *args:存放元组参数;
    • **kwargs: 存放字典参数;(kwkeyword的缩写)

2.6 元组和字典的拆包

  • 在调用带有多值参数的函数时,如果希望:
    • 将一个元组变量,直接传递给 args
    • 将一个字典变量,直接传递给 kwargs
  • 就可以使用拆包,简化参数的传递, 拆包的方式是:
    • 在元组变量前,增加一个 *
    • 在字典变量前,增加两个 *
# 示例一
def demo(*args, **kwargs):

    print(args)
    print(kwargs)

gl_nums = (1, 2, 3)
gl_info = {"name":"小明", "age": 17}

demo(*gl_nums, **gl_info)


参考资料:

Python 基础(二)

标签:ref   关键字   keyword   上传   htm   设置   资料   inf   ret   

原文地址:https://www.cnblogs.com/linkworld/p/8511906.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!