深浅拷贝

先说一下可变和不可变数据类型,在原值的基础上修改,id不变值改变了的就是可变数据类型;而值改变了id也变了,即重新申请一个空间来放新值,这就是不可变数据类型。

拷贝

普通的拷贝就等于赋值,就是把一个变量值赋给另一个变量名

l1=[1,2,3,[4,5,6]]
l2=l1
l1.append(7)
print(l1)
print(l2)

[1, 2, 3, [4, 5, 6], 7]

[1, 2, 3, [4, 5, 6], 7]

浅拷贝

浅拷贝需要导入一个copy的模块,这种拷贝是新开了一个列表的内存,但列表里的元素指向的地址都还是一样的,如果列表里还有可变的数据类型的话,这个数据里的不可变类型修改的话,新列表也会修改。

import copy
l1=[1,2,3,[4,5,6]]
l2=copy.copy(l1)
l1.append(7)
print(l1)
print(l2)
l1[3].append(8)
print(l1)
print(l2)

[1, 2, 3, [4, 5, 6], 7]

[1, 2, 3, [4, 5, 6]]

[1, 2, 3, [4, 5, 6, 8], 7]

[1, 2, 3, [4, 5, 6, 8]]

深拷贝

和浅拷贝一样也需要导入一个copy模块,深拷贝的话是新列表存在一个单独的内存空间,其中元素指向的变量值地址也不相同,所以无论原列表怎么变,新列表都不会变。

import copy
l1=[1,2,3,[4,5,6]]
l2=copy.deepcopy(l1)
l1.append(7)
print(l1)
print(l2)
l1[3].append(8)
print(l1)
print(l2)

[1, 2, 3, [4, 5, 6], 7]

[1, 2, 3, [4, 5, 6]]

[1, 2, 3, [4, 5, 6, 8], 7]

[1, 2, 3, [4, 5, 6]]

异常处理

什么是异常

异常就是程序运行时发生错误的信号,然后抛出异常

语法错误

# 语法错误示范一
if # 语法错误示范二
def test:
pass # 语法错误示范三
class Foo
pass # 语法错误示范四
print(haha

逻辑错误

# TypeError:int类型不可迭代
for i in 3:
pass # ValueError
num=input(">>: ") #输入hello
int(num) # NameError
aaa # IndexError
l=['egon','aa']
l[3] # KeyError
dic={'name':'egon'}
dic['age'] # AttributeError
class Foo:pass
Foo.x # ZeroDivisionError:无法完成计算
res1=1/0
res2=1+'str'

异常的种类

常用的异常

  • AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
  • IOError 输入/输出异常;基本上是无法打开文件
  • ImportError 无法引入模块或包;基本上是路径问题或名称错误
  • IndentationError 语法错误(的子类) ;代码没有正确对齐
  • IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
  • KeyError 试图访问字典里不存在的键
  • KeyboardInterrupt Ctrl+C被按下
  • NameError 使用一个还未被赋予对象的变量
  • SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
  • TypeError 传入对象类型与要求的不符合
  • UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
  • ValueError 传入一个调用者不期望的值,即使值的类型是正确的

其他异常

  • ArithmeticError
  • AssertionError
  • AttributeError
  • BaseException
  • BufferError
  • BytesWarning
  • DeprecationWarning
  • EnvironmentError
  • EOFError
  • Exception
  • FloatingPointError
  • FutureWarning
  • GeneratorExit
  • ImportError
  • ImportWarning
  • IndentationError
  • IndexError
  • IOError
  • KeyboardInterrupt
  • KeyError
  • LookupError
  • MemoryError
  • NameError
  • NotImplementedError
  • OSError
  • OverflowError
  • PendingDeprecationWarning
  • ReferenceError
  • RuntimeError
  • RuntimeWarning
  • StandardError
  • StopIteration
  • SyntaxError
  • SyntaxWarning
  • SystemError
  • SystemExit
  • TabError
  • TypeError
  • UnboundLocalError
  • UnicodeDecodeError
  • UnicodeEncodeError
  • UnicodeError
  • UnicodeTranslateError
  • UnicodeWarning
  • UserWarning
  • ValueError
  • Warning
  • ZeroDivisionError

异常处理

提前预防

AGE = 10
while True:
age = input('>>: ').strip()
if age.isdigit(): # 只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
age = int(age)
if age == AGE:
print('you got it')
break
>>: nick
>>: sdkf
>>: 2
>>: 10
you got it

事后预防

如果错误无法预计则用到try..except

#  举例
try:
f = [
'a',
'a',
'a',
'a',
'a',
'a',
'a',
]
g = (line.strip() for line in f)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
except StopIteration:
f.close()
a
a
a
a
a

用指定方法来处理异常

s1 = 'hello'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
invalid literal for int() with base 10: 'hello'

万能异常方法

s1 = 'hello'
try:
int(s1)
except Exception as e:
print(e)

抛出异常(基本没用)

try:
raise TypeError('抛出异常,类型错误')
except Exception as e:
print(e)

断言(调试用,现在基本上没用)

try:
assert 1 == 2
except Exception as e:
print(e)

文件处理

这里只稍微扯一下,明后天会具体介绍。

用open来打开文件,这个方法里有3个参数,第一个是path路径,第二个是mode操作方式,第三个encoding是编码方式。

比如:

f=open('compare.py','w',encoding='utf-8')
f.write('s')
f.close()

这就是一个文件的写入操作,注意写入会覆盖文件之前的内容!!!

一碗不错的鸡汤http://hawstein.com/2019/04/24/life-cannot-dp-but-dont-be-always-greedy/

python-day9(正式学习)的更多相关文章

  1. Python 装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...

  2. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

  3. 从Theano到Lasagne:基于Python的深度学习的框架和库

    从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...

  4. Comprehensive learning path – Data Science in Python深入学习路径-使用python数据中学习

    http://blog.csdn.net/pipisorry/article/details/44245575 关于怎么学习python,并将python用于数据科学.数据分析.机器学习中的一篇非常好 ...

  5. (转载)Python装饰器学习

    转载出处:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方 ...

  6. 正式学习React(五) react-redux源码分析

    磨刀不误砍柴工,咱先把react-redux里的工具函数分析一下: 源码点这里  shallowEqual.js export default function shallowEqual(objA, ...

  7. 正式学习React(一) 开始学习之前必读

    为什么要加这个必读!因为webpack本身是基于node环境的, 里面会涉及很多路径问题,我们可能对paths怎么写!webpack又是怎么找到这些paths的很迷惑. 本文是我已经写完正式学习Rea ...

  8. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  9. Python装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- ...

  10. Python的基础学习(第二周)

    模块初始 sys模块 import sys sys.path #打印环境变量 sys.argv#打印该文件路径 #注意:该文件名字不能跟导入模块名字相同 os模块 import os cmd_res ...

随机推荐

  1. 22.Python赋值运算符(入门必读)

    赋值运算符主要用来为变量(或常量)赋值,在使用时,既可以直接用基本赋值运算符“=”将右侧的值赋给左侧的变量,右侧也可以在进行某些运算后再赋值给左侧的变量. = 基本赋值运算符 Python 使用“=” ...

  2. webservice代码编写主要包括服务器端发布和客户端调用。

    一.java工程发布,java工程调用   (一).服务器端的编写 1.在eclipse里新建java project工程,创建功能类,通过关键字@webservice(name="newI ...

  3. Linux 竞态条件和临界区

    1. 临界区和竞态条件: 临界区:访问和操作共享数据的代码段: 竞态条件:当有多个线程同时进入临界区时,执行结果取决于线程的执行顺序: 如下述代码,当多个线程同时调用func函数,对共享数据sum进行 ...

  4. SRS之信号的管理:SrsSignalManager

    1. 综述 SRS 中使用了 State Threads 协程库,该库对信号的处理是将信号事件转换为 I/O 事件.主要做法是:对关注的信号设置同样地信号处理函数 sig_catcher(),该函数捕 ...

  5. 备忘录:“#ifdef __cplusplus extern "C" { #endif”的定义

    看一些程序的时候老是有“#ifdef __cplusplusextern "C" {#endif”的定义,搞搞清楚是怎么回事: Microsoft-Specific Predefi ...

  6. Fastadmin 后台表单,外键关键,步骤

    1.在 public\assets\js\backend 目录中找到对应的js,修改 2.对应控制器中加上index()方法:开启关联查询 重点: protected $relationSearch ...

  7. ftp配置文件详解

    ### 主配置文件(/etc/vsftpd/vsftpd.conf) 严格来说,整个 vsftpd 的配置文件就只有这个档案!这个档案的设定是以 bash的变量设定相同的方式来处理的, 也就是`参数= ...

  8. PMML辅助机器学习算法上线

    在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环 ...

  9. Linux安全加固之中间件Tomcat

    (注:皆为参考操作配置) 这次是tomcat的Linux加固,分为身份鉴别.访问控制.安全审计.资源控制和入侵防范5个方面大部分加固基于xml配置文件进行修改,也应根据实际需求制定方案.寻找配置文件目 ...

  10. jq 实时监听input输入框的变化

    项目需求中有时候需要实时监测 input 的值变化,虽然 input 自身有 focus 和 blur 事件,但是有时候跟需求不符合. 所以实时监听 input 值变化的代码为: $("#i ...