深浅拷贝

先说一下可变和不可变数据类型,在原值的基础上修改,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. AcWing:143. 最大异或对(01字典树 + 位运算 + 异或性质)

    在给定的N个整数A1,A2……ANA1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少? 输入格式 第一行输入一个整数N. 第二行输入N个整数A1A1-ANAN. 输出格式 输出一 ...

  2. Oracle DBCA工具检测不到ASM磁盘组

    本例环境: 操作系统OEL 6.5 数据库版本:11.2.0.4 问题:DBCA建库的时候,检测不到ASM磁盘组 因素一:可能是在授权的时候执行了 chown –R 775 /u01/app等修改权限 ...

  3. Java基础__随机生成1~15之间不重复的数字

    package text; import java.util.ArrayList; import java.util.List; public class Text { public static v ...

  4. PostgreSQL10配置远程连接

    PostgreSQL10配置远程连接 psql --version centos7.3中 1.开启相应的防火墙端口,允许端口5432 2.访问权限配置/etc/postgresql/10/main/下 ...

  5. mysql常用操作与日志

    在linux上的mysql命令 mysql -e "mysql内部命令" #可在外部显示myslq内的输出,-e可跟多条命令用;隔开 在mysql内的mysql命令 system ...

  6. 升级日志sdfsdfsdfsdfsdfdsf

    升级日志sdfsdfsdfsdfsdfdsf 升级日志小书匠 版本号 新功能 修改

  7. 自定义Dialog布局的弹窗功能的简单实现

    package com.loaderman.dialogdemo; import android.os.Bundle; import android.support.v7.app.AlertDialo ...

  8. Mysql密码忘记,修改密码方法

    1.set password for ‘root’@’localhost’ = password(‘czllss’); -- czllss为新密码

  9. iOS证书详解--转载

    一.成员介绍1.    Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1)    Developer Certification(开发证书)安装在电脑上 ...

  10. Eclipse 设置护眼背景色

    Eclipse 设置护眼背景色 1.设置字体大小 Window --> Preferences --> General --> Apprearance --> Colors a ...