设为首页 收藏本站
查看: 1271|回复: 0

[经验分享] python3-2笔记

[复制链接]
YunVN网友  发表于 2018-8-7 12:57:29 |阅读模式
  一.深复制和浅复制
  1.引用和赋值
  引用是一个值,指向某些数据
  列表引用是指向一个列表的值
  当你将列表赋给你一个变量时,实际上是将列表的‘引用’赋给了改变变量。
  id() : 在内存中一个独特的空间,相当于索引>>> a=[1,2,3]
  >> b=a

  >>>  6699720

  >>>  6699720
  >> b[0]=111

  >>>  6699720

  >>>  6699720
  >> a
  [111, 2, 3]
  >> b
  [111, 2, 3]
  >> c=[1,2]
  >> d=[1,2]

  >>>  7438408

  >>>  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.append(list1[i-1]+list1[i-2])
print(第%d项值%d'%(i,list1))
  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])
  应用:对数据进行总体计算

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-548252-1-1.html 上篇帖子: python入门(六)装饰器的理解 下篇帖子: python入门(三)判断语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表