集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。
集合元素(set elements):组成集合的成员(不可重复)
集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键
什么是可哈希,不可哈希?
什么是可哈希(hashable)?
简要的说可哈希的数据类型,即不可变的数据结构(字符串str、元组tuple、对象集objects)。
哈希有啥作用?它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间复杂度下查询它,所以,哈希对高效的算法和数据结构很重要。
什么是不可哈希(unhashable)?
同理,不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set)
集合分类:可变集合、不可变集合
可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素
不可变集合(frozenset):与上面恰恰相反
函数有什么作用?
1.减少重复代码
2.方便修改,更容易扩展
3.保持代码一致性
#加法器 def add(*args): #*args构造成了元组 print(args) #args表示参数 sum = 0 for v in args: sum += v return sum print(add(1, 4, 6, 9)) print(add(1, 4, 6, 9, 5)) def print_info(**kwargs): #**kwargs创建了字典;kwargs 关键字参数参数 print(kwargs) #**kwargs创建了字典 for i in kwargs: print('%s:%s' % (i, kwargs[i])) # 根据参数可以打印任意相关信息了 return print_info(name='alex', age=18, sex='female', hobby='girl', nationality='Chinese', ability='Python')
###########################位置 def print_info(name, *args, **kwargs): # 位置不能错
# def print_info(name,**kwargs,*args):报错 print('Name:%s' % name) print('args:', args) print('kwargs:', kwargs) return print_info('alex', 18, hobby='girl', nationality='Chinese', ability='Python') #print_info(hobby='girl','alex',18,nationality='Chinese',ability='Python') #报错 # print_info('alex',hobby='girl',18,nationality='Chinese',ability='Python') #报错
#关于不定长参数的位置: *args放在左边,元组, *kwargs参数放在右边,字典
#若有默认参数,放左边。
函数的返回值return
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None
- return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出。
5.1 作用域介绍
python中的作用域分4种情况:
- L:local,局部作用域,即函数中定义的变量;
- E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
- G:globa,全局变量,就是模块级别定义的变量;
- B:built-in,系统固定模块里面的变量,比如int, bytearray等。
搜索变量的优先级顺序依次是:作用域局部 >外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。
x = int(2.9) # int built-in 系统固定模块里面的变量
g_count = 0 # global 全局变量
def outer():
o_count = 1 # enclosing 嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
def inner():
i_count = 2 # local 局部作用域,即函数中定义的变量;局部作用于不能修改全局变量
print(o_count)
# print(i_count) 找不到
inner()
outer()
# print(o_count) #找不到