Python基础_第7章_Python函数进阶
Python函数进阶
一、常见问题汇总
1、格式化输出与%百分号
以下结果中,可以正常输出“50%及格”语句是(B)
A、print(“%d%及格” % (50)) => 回答大部分结果(Python这种写法不正确)
B、print(“%d%%及格” % (50)) => 正确结果
2、字符串切片
定义一个字符串str1 = ‘abcdefg’,使用切片截取字符串str1[3::-2],求返回结果:(C)
C、‘db’
只顾头来尾不管,步长为正则正向移动(从左向右),步长为负,则逆向移动(从右向左)
3、字典的定义
其实字典中的key可以是很多数据类型(不可变数据类型 => 整型、浮点型、字符串、元组)
my_dict = {
}
my_dict[1] = 1
my_dict['1'] = 2
my_dict[1.0] = 3
print(my_dict[1] + my_dict['1'] + my_dict[1.0]) # 8
# 注:在字典中,如果key是数字类型,如果两个值相等,则后面这个key会替换前面这个key的value值
4、企业面试题
对于一个函数num,当调用num(1,2,a=3,b=4)和调用num(3,4,5,6,a=1)以及num(a=1,b=2)的时候都可以正常运行,并且可以对元组以及字典类型进行遍历输出,对字典类型进行输出字典的键值对(形式为:key:a,value:1),请写出这个函数并完成调用。
函数调用时,参数不固定,另外传递的参数的类型(不定长位置参数和不定长关键词参数)
def num(*args, **kwargs):
for i in args:
print(i)
for key,value in kwargs.items():
print("key:",key,"value:",value)
num(1,2,3,a=1, b=2)
# num(a=1, b=2) 此种情况也可
二、引用变量与可变、非可变类型
1、引用变量
在大多数编程语言中,值的传递通常可以分为两种形式“值传递与引用传递”,但是在Python中变量的传递基本上都是引用传递。
☆ 聊聊变量在内存底层的存储形式
a = 10
第一步:首先在计算机内存中创建一个数值10(占用一块内存空间)
第二步:在栈空间中声明一个变量,如a
第三步:把数值10的内存地址赋予给变量小a,形成所谓的==“引用关系”==
☆ 如何验证Python中变量的引用关系
答:可以使用内置方法id(),其参数就是要显示的变量信息 => id(变量名称)
a = 10
print(id(a))
☆ 把一个变量赋予给另外一个变量的影响
a = 10
b = a
print(id(a))
print(id(b))
运行结果:
说明:由以上运行结果可知,当我们把一个变量赋予给另外一个变量时,其两者指向的内存地址相同。就说明a和b指向了同一块内存空间,原理图如下:
思考:如果在b = a以后,我们改变了变量a的值,问变量b是否会受到影响?
# a = 10
# print(id(a))
a = 10
b = a
a = 100
print(b) # 10 或 100
print(id(a))
print(id(b))
原理图:
总结:不可变数据类型(数值)在赋值以后,其中一个值的改变不影响另外一个变量,因为两者指向空间地址不同。
2、Python中可变和非可变数据类型
☆ 问题1:在Python中一共有几种数据类型?
答:7种,数值(int整型、float浮点类型)、bool类型(True和False)、字符串类型(str)、元组(tuple 1,2,3)、列表(list [1, 2, 3])、字典(dict {key:value})、集合(set {1, 2})
在Python中,我们可以把7种数据类型分为两大类:可变类型 + 非可变类型
① 非可变类型
数值(int整型、float浮点类型)
bool类型(True和False)
字符串类型(str)
元组(tuple 1,2,3)
② 可变类型
列表(list [1, 2, 3])
字典(dict {key:value})
集合(set {1, 2})
☆ 问题2:如何判断一个数据类型是可变类型还是非可变类型?
在Python中,可变类型与非可变类型主要是通过这个数据类型在内存中的表现形式来进行定义的。
① 可变类型就是在内存中,其内存地址一旦固定,其变量的值是可以发生改变的
a = [1, 2, 3]
print(id(a))
# 向内存中追加新数据(对数据进行改变只能通过数据类型.方法()实现)
a.append(4)
print(id