前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3-2笔记

python3-2笔记

作者头像
py3study
发布2020-01-03 15:47:22
4260
发布2020-01-03 15:47:22
举报
文章被收录于专栏:python3

一.深复制和浅复制 1.引用和赋值 引用是一个值,指向某些数据 列表引用是指向一个列表的值 当你将列表赋给你一个变量时,实际上是将列表的‘引用’赋给了改变变量。 id() : 在内存中一个独特的空间,相当于索引>>> a=[1,2,3]

b=a id(a) 6699720 id(b) 6699720 b[0]=111 id(a) 6699720 id(b) 6699720 a [111, 2, 3] b [111, 2, 3] c=[1,2] d=[1,2] id(c) 7438408 id(d) 7438536 print(id(a)==id(b)) True

copy模块的copy()和deepcopy() copy():复制第一层列表,完全指定在另外的空间,其他层次指定在同一片空间 deepcopy():完全复制过来,任何东西都不会被重复引用到同一个内存空间 浅复制机制:(copy)

import copy a [111, 2, 3] c=copy.copy(a) print(id(a)==id(c)) False c[1]=333 c [111, 333, 3] a [111, 2, 3] a=[1,2,[3,4]] d=copy.copy(a) d [1, 2, [3, 4]] print(id(d)==id(a)) False print(id(d[2])==id(a[2])) True d[2][0]=300 a [1, 2, [300, 4]] d [1, 2, [300, 4]]

深复制:(deepcopy)

e=copy.deepcopy(a) e [1, 2, [300, 4]] e[2][1]=4444 e [1, 2, [300, 4444]] a [1, 2, [300, 4]]

二.控制流-条件判断

#if条件分支 age=eval(input('请输入你的年龄')) #eval():自动转换为数据类型 if 18<=age<150: print('你可以谈恋爱了!') elif age>150: print('妖姬') else: print('你没成年',end=',') print('不能早恋')

案例一:输入一个数字,输出数字对应的星期几 num=eval(input('请输入一个数字:')) if num==1: print('星期一') elif num==2: print('星期二') elif num==3: print('星期三') elif num==4: print('星期四') elif num==5: print('星期五') elif num==6: print('星期六') elif num==7: print('星期日') else: print('输入数字不合法')

案例二:润年的判断(年份能被4整除但不能被100整除或者能被400整除) num1=eval(input('请输入一个年份:')) if (num1%4==0 and num1%100!=0) or num1%400==0: print('是润年') else: print('不是闰年')

#年龄段的判断 (注意缩进) age=eval(input('请输入你的年龄:')) if 0< age<18: pass (通过pass什么都不显示) #print('你是个青少年') else: if 18<=age<30: print('你是个年轻人') else: if 30<age<=50: print('中年人') else: if 65<age<120: print('老年人') else: print('你是个异类')

二、循环语句 1.while i=0 # 如果是i=1呢 while i<100: #那么i=101 print('<<三国演义>> 我看了%d集'%(i+1)) i=i+1 print ('总有看完了,哭成狗了')

break : 如果遇到beak语句,就会马上跳出while循环语句 continue :如果程序执行遇到continue,就会马上跳回到循环开始处,重新循环条件求值。

#死循环 #陷入无限循环中 while True: print('love you')

for循环和range()函数 利用在条件为true时,while循环就会继续循环(这是它的名称的由来)。 但如果你项让一个代码块执行固定次数,该怎么办? 可以通过for循环语句和range()函数来实现。 【for语法】 【for 关键词 一个变量名 in 关键字 调用range()方法,最多传入3个参数 冒号 在下一行开始,缩进的代码块(称为for子句)】

range() 某些函数可以用多个参数调用,参数之间用的逗号分开,range() 就是其中之一可以改变传递给range()的整数,来实现各种整数序列 包括从0以外的值开始range(start,end,step)返回列表 start 起始值,end 终止值,step 步进值 默认为1

for i in range(1,101): print ('我跑了%d圈'%i) print ('我瘦了')

for i in range(100): print('我跑了%d圈'%(i+1)) print ('我瘦了')

案例一 输入一个数值,输出从0到这个数的所有奇数。并且每隔10个数换一行 num=eval(input('请输入一个数值:')) for i in range(1,num+1,2): print(i,end=' ') #每隔10个数换一行 if (i+1)%20==0: print()

案例二 已知大公鸡5元,母鸡3元,小鸡1元1个。(百元买百鸡) sum=100 #i、j、k分别表示公鸡,母鸡、小鸡的个数: for i in range(20): for j in range(33): for k in range(0,100,3): if i+j+k==sum and i5+j3+k/3==sum: print('公鸡买了%d只,母鸡买%d只,小鸡买了%d只'%(i,j,k))

案例三 已知第一个数为1,第二个数为1,并且满足等式f(x)=f(x-1)+f(x-2),请计算房(100)的值。(斐波那契数列) list1=[1,1] for i in range(100) list1[i].append(list1[i-1]+list1[i-2])

print(第%d项值%d'%(i,list1[i]))

print(list1[99])

图形输出 for i in range(1,9): print(''i)

for i in range(9): print(''(i+1))

U.异常捕获 语法:try .... except 异常: 在python程序中遇到错误,或异常,意味着整个程序崩溃。我们不希望这发生在真实世界的程序中,相反,你希望程序 能检测错误,处理他们,然后正常运行。 捕获异常: 一旦产生异常,就捕获他,然后进行一定处理。 目的就是为了保证程序的正常执行,不会产生异常而终止程序继续实行。 list1=[0,1] try: print(list2[2]) except NameError as e: print(e) except IndexError as e: print(e) except BaseException as e: print(e) print('程序正常运行') print('程序正常运行')

函数: def hello(): print('hello') print('TOM!!') print('Hello there')

hello() hello() hello()

a.第一行是def语句,它定义了一个名为hello()函数; b.def语句之后的代码块是函数体,这段代码在函数调用是执行的 c.函数之后的hello()语句是函数调用。(函数调用就是函数名跟括号)

def hello(name): print('hello,' +name)

hello('TOM') hello('xp') a.在这个程序的hello()函数定义中,有一个名为name的变元; b.变员是一个变量,当函数调用时,参数就存放在其中。 c.保存在变元中的值,在函数返回就丢失了。

返回值和return语句 如果调用len()函数,并向他传入像‘hello’这样的参数调用就求值为整数5,这是传入的字符串长度 一般来说,函数调用求值的结果,成为函数的返回值。

a.return语句包含以下部分 .return 关键字 .函数应该返回的值或表达式 b.如果在return语句中使用了表达式,返回值就是该表达式求值的结果。 c.如果使用不带值得return语句(也就是中有return本身),那么久返回None. 1 def hello(name): return '再见' print(hello('周老师')) 2. def hello(name): return 或者pass print(hello('周老师'))

摇奖小程序: 定义一个函数,它根据传入的数学参数,返回一个同的字符串

步骤: 1.导入随机数模块(import random) 2.构建一个函数体 3.产生随机数 4.调用函数 #导入随机数模块 import random #产生一个1-9随机真正整数 a=random.randint(1,9) #print(a) def Answer(num): if num==1: return '一等奖' elif num==2: return '二等奖' elif num==3: return'三等奖' elif num==4: return '参与奖' else: return '谢谢参与' print(Answer(a))

lambda表达式定义(也称为匿名函数) a.lambda只是一个表达式,函数体比def简单 b.lamdba主体为一个表达式,不是代码块,仅仅能在lambda表达式中封装有限的逻辑进去。 (1)无参数形式 a=lambda:'ixp' print (a()) (2)有参数形式: a=lambda x:x**2 print (a(10)) (3)取出x的每一项,2倍数都部遍历出来 b=lamdba x:[i for i in x if i%2==0] #生成器 print b([1,2,3,4,5,6,])

#生成器 c=lambda x:[i for i in x if i%2==0] #取出X的每一项,2的倍数全部遍历出来 print(c([1,2,3,4,5,6]))

Filter(),map(),reduce() python内置了一些特殊函数,这些函数很具有python特性。 可以让代码更加简洁。filter,map,reduce三个函数比较类似,都是应用于序列的内置函数,常见的序列包括list、tuple、str. 通常与lambda表达式连用。

1.filter 函数 filter 函数会对指定序列执行过滤操作,批量提取。 filter 函数的定义: filter (function or None,seq) -->list,tuple,or string filter 函数会对序列参数sequence中的每个元素调用function函数,最后返回的结果包含调用结果为true的元素。

案例一: 取出列表里的能被3整除的元素 foo=[2,18,9,22,17,24,8,12,27] print filter(lambda:xx%3==0,foo )

2.map函数 map函数会根据提供的函数对指定序列做批量处理。 map函数的定义 map(function,seq,[seq,...]) >list 通过定义可以看到,这个函数的第一个参数是一个函数,剩下的参数是一个或多个序列。 function可以理解为是一个一对一或多对一的函数,map的作用是以参数序列中的每个元素调用function函数,返回包含每次function函数 返回值得list.

案例二: 1.对一个序列中的每个元素进行平方运算: map(lambda x:x**2,[1,2,3,4,5])

#map b=map(lambda x:x**2,[1,2,3,4,5]) print (list(b))

2.对两个序列中的元素依次求和。 map(lambda x,y:x+y,[1,3,5,7,9],[2,4,6,8,10]) 注意:在参数存在多个序列时,会依次以每个序列中相同位置的元素做参数调用function函数。

c=map(lambda x,y:x+y,[1,3,5,7,9],[2,4,6,8,10]) print(list(c))

3.当函数为None时。 map(None,[1,3,5,7,9],[2,4,6,8,10]) c=map(None,[1,3,5,7,9],[2,4,6,8,10]) print(c) (只能这样类型输出)

reduce函数 reduce函数会对参数序列中元素进行总体计算。 reduce函数的定义; reduce(fuction,seq,initial)->value function参数是一个有两个参数的参数,reduce依次从seq中取一个元素,和上次调用function 的结果做参数再次调用function. 第一次调用function时,如果提供inital参数,会以seq中的第一个元素和 inital作为参数调用function,否则会以序列seq中的前两个元素作参数调用function. #reduce批量计算 #python3要引入模块functools 案例三: 1.reduce(lambda x,y:x+y,[2,3,4,5,6],1) 结果为21(((((1+2)+3)+4)+5)+6)) import functools d=functools.reduce(lambda x,y:x+y,[2,3,4,5,6],1) print(d) #Y=1,x=2 x=x+y #x=3,y=3 #x6,y=4 #x10,y=5 #x=15 ,y=6 #x=21 2.reduce(lambda x,y:x+y,[2,3,4,5,6]) 结果为21(((((1+2)+3)+4)+5)+6))

import functools d=functools.reduce(lambda x,y:x+y,[2,3,4,5,6]) print(d) #Y=2,x=3 #x=5,y=4 #x9,y=5 #x14,y=6 #x=21 #否则会以序列seq中的前两个元素作参数调用function. function不能为None

小结: Filter 函数 语法:Filter(funtion or None.seq) 应用:对数据进行批量提取

map函数 语法:map(funtion,seq,[seq,...]) 应用:对数据进行批量提取

Reduce函数 语法:reduce(funtion,sequence,[initial]) 应用:对数据进行总体计算

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • print(第%d项值%d'%(i,list1[i]))
相关产品与服务
批量计算
批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档