Python 入门
Posted 深海不寂莫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 入门相关的知识,希望对你有一定的参考价值。
集合
集合:把不同的元素组成一起形成集合,是python基本的数据类型。
集合元素:组成集合的成员。
>>> x = [11,22,33,11] >>> se = set(x) >>> se {33, 11, 22}
集合对象是一组无序排列的不重复的值。
创建集合
字符串,数字,列表和字典都可以作为集合中的元素,当用字典作为集合中的元素时,默认取字典中的Key作为集合中的元素。
1 >>> x = () 2 >>> li = [\'a\',\'b\',\'c\'] 3 >>> x = (li) 4 >>> x 5 [\'a\', \'b\', \'c\'] 6 >>> x = set(\'abcdefg\') 7 >>> x 8 {\'a\', \'g\', \'c\', \'f\', \'b\', \'d\', \'e\'} 9 >>> li = [11,22,33,44,55] 10 >>> y = set(li) 11 >>> y 12 {33, 11, 44, 22, 55} 13 >>> dict = { 14 ... \'cpu\':12, 15 ... \'mem\':16, 16 ... \'disk\':\'3.0T\', 17 ... \'U位\':\'15\' 18 ... } 19 >>> set(dict) 20 {\'disk\', \'cpu\', \'mem\', \'U位\'}
集合本身是无序的,所以不能为集合创建索引或切片,只能循环遍历或使用in、not in来访问或判断集合元素
s.add()
s.update()
s.remove()
s.clear()
s1.intersection(s2) s1和s2的交集
>>> s1 = {11,22,33} >>> s2 = {22,33,44} >>> s1.intersection(s2) {33, 22}
s1.difference(s2) s1中存在s2中不存在
>>> s1.difference(s2) {11}
例:
现在字典1和字典2如下,要求用字典2去更新字典1,如果字典2中没有的key则在字典1中删除,字典2中有字典1中没有的key则在字典1中建立相应的key.
dict_1 = { \'cpu\':16, \'mem\':8, \'disk\':\'1.8T\', \'U位\':\'25\' } dict_2 = { \'cpu\':12, \'mem\':16, \'disk\':\'3.0T\', \'U位\':\'15\' } s1 = set(dict_1.keys()) s2 = set(dict_2.keys()) remove_key = s1.difference(s2) add_key = s2.difference(s1) update_key = s1.intersection(s2) for i in remove_key: del dict_1[i] for i in add_key: dict_1[i] = dict_2[i] for i in update_key: if dict_1[i] == dict_2[i]: pass else: dict_1[i] = dict_2[i] >>> dict_1 #字典更新完成 {\'U位\': \'15\', \'disk\': \'3.0T\', \'cpu\': 12, \'mem\': 16}
函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
以下为一个最简单的函数,每次调用都会打印"this is a test"
def name (): print(\'this is a test\') return
函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
以下为一个函数最简单的调用方法:
def name (): print(\'this is a test\') return name() this is a test
函数参数的传递:
1、普通参数(严格按照顺序,将实际参数赋值给形式参数)
2、默认参数(必须放置在参数列表的最后)
3、指定参数(将实际参数赋值给制定的形式参数)
4、动态参数:
* 默认将传入的参数,全部放置在元组中
** 默认将传入的参数,全部放置在字典中,以key,value的方式显示
5、万能参数, *args,**kwargs
以下为各种传入参数的具体方法:
def test1(x,y): print(x,y) test1(10,20) 10 20 def test2(*args): print(args) test2([1,2,3,4,5]) ([1, 2, 3, 4, 5],) #默认会将传入的参数作为一个元组 def test2(**args): print(args) test2(name=\'yang\',age=18) {\'name\': \'yang\', \'age\': 18}
全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
name = \'yang\' def test(): name = \'zheng\' age = 28 test() print(name) yang def test2(): global name name = \'zheng\' age = 28 test2() print(name) zheng
在上面的例子中,首先定义了name = \'yang\',然后在函数内部重新定义了这个变量,可以看到在函数外部这个变量的值并未改变,而在下面的例子中,用了global声明,此时定义的变量可以在全局范围内使用。
lambda表达式和列表解析
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
def number (x): return x + 1 #普通方式定义函数 print(number(123)) 124 lambda_1 = lambda x: x+1 print(lambda_1(123)) #以lambda表达式方式定义函数 124
内置函数
map
遍历序列,对序列中每个元素进行操作,最终获得一个新的序列。
li = [11,22,33] lst = map(lambda x: x+1,li) print(list(lst)) >>>[12, 23, 34] #对列表中每个元素都加1
li_1 = [11,22,33] li_2 = [44,55,66] li_3 = map(lambda a,b: a+b,li_1,li_2) #用li_1中第一个元素加上li_2中第一个,第二个加第二个,依次相加 print(list(li_3)) >>>[55, 77, 99]
filter
对序列中的元素进行过滤,最终用符合要求的元素再组成一个新的序列。
li = [11, 22, 33] lst = filter(lambda x: x > 22, li) print(list(lst)) >>>[33]
当然,你也可以用列表解析的方法完成上述要求。
li = [11,22,33] lst = [x+1 for x in li] #加1 print(lst) >>>[12, 23, 34]
li_1 = [11,22,33] li_2 = [44,55,66] lst = [(a+b) for a in li_1 for b in li_2 if li_1.index(a) == li_2.index(b) ] #对应相加 print(lst) >>>[55, 77, 99]
li = [11,22,33] lst = [x for x in li if x > 22] #筛选出大于22的 print(lst) >>>[33]
以上是关于Python 入门的主要内容,如果未能解决你的问题,请参考以下文章
Python入门之函数调用——第3关:函数与函数调用 - 分清主次
Python入门之函数调用——第2关:函数正确调用 - 得到想要的结果