专栏首页python3python3-2笔记

python3-2笔记

一.深复制和浅复制 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]) 应用:对数据进行总体计算

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python基础(中)

    注意:在python3中input获取键盘输入的数据,都以字符串的方式进行保存,即使输入的是数字。

    py3study
  • 【机器学习】Python 快速入门笔记

            在模块内、所有函数外、class外的变量,可以被全局共享,也可以被外部文件共享

    py3study
  • day 15 - 1 内置函数

    字符串类型代码的执行 eval() exec() compile()  [不常用]

    py3study
  • 【机器学习】Python 快速入门笔记

            在模块内、所有函数外、class外的变量,可以被全局共享,也可以被外部文件共享

    py3study
  • Python基础(中)

    注意:在python3中input获取键盘输入的数据,都以字符串的方式进行保存,即使输入的是数字。

    py3study
  • 最全Python内置函数

    判断真假,  True:真  ,  False:假,   把一个对象转换成bool值

    Wyc
  • Python基础入门视频课程——笔记

    视频课程链接:http://edu.51cto.com/course/14859.html

    py3study
  • python --日期输出学习

    py3study
  • 【python入门系列课程 第一课 打印一个字符画】

    本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地...

    用户7054460
  • 4.1-4.4 python的数据类型

    print('hello {0}').format(name)       #执行效率是最高的

    py3study

扫码关注云+社区

领取腾讯云代金券