python踩坑记


在学习python和tensorflow的时候,遇到了以下几个小问题和踩过的坑,特做总结。

控制台输出的各种waring信息

我们在运行tensorflow代码,常常能在控制台看到各种warning信息,有时候它的存在会影响我们看其他的输出。
或者有时候我们在看其他作者的tensorflow代码里面会有这样一段代码
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
其实这个就是解决控制台输出的问题。
关于’2’ 所在的那个参数的总结如下:
首先我们要明白控制台的log信息有如下四个等级
INFO(通知)<WARNING(警告)<ERROR(错误)<FATAL(致命的);

数字 屏蔽信息
‘0’
‘1’ INFO(通知)
‘2’ INFO(通知)+WARNING(警告)
‘3’ INFO(通知)<WARNING(警告)<ERROR(错误)

注意有两点:
1.'0’是默认值,输出所有信息
2.'3’不是不输出信息,因为error上面还有fatal

运行python文件报SyntaxError

当你写操作文件的python代码的时候,如果你不注意一下这一点,常常会报错。
在windows中,读取文件路径可以使用“\”,但是在python字符串中“\”有转义的含义,如"\t"可代表TAB,"\n"代表换行. 所有我们需要采取一些措施让我们写的文件路径的 “” 不被理解为转义字符。

  • 在路径前面加"r",即保持字符原始值的意思。示例如下:
with open(r'E:\test.txt', 'w') as f:
  • 替换为双反斜杠,示例如下:
with open('E:\\test.txt', 'w') as f:
  • 替换为正斜杠,示例如下
with open('E:/test.txt', 'w') as f:

通过以上三种方法的处理,就可以很好的解决文件名的书写问题。
当然这里还要说明一下第一个’r’和 读取文件的’r’的含义是不同。

r 默认,表示从文件读取数据。(可能会出现文档读不全的问题)
w 以写入方式打开文件。先删除原文件内容,再重新写入新内容。
a 以写入方式打开文件,在文件末尾添加新的内容
x 以写入方式创建新文件并打开文件。
r+ 表示对文件进行可读写操作(删除以前的所有数据)

字符串中出现 " " 或者’ ’

1、在双引号或者单引号前面加个转义符 \ ,即反斜杠。如"Hello "W “orld”,会输出 Hello "W"orld

2、用单引号引起整个字符串时,中间的双引号会打印出来。如’Hello "W"orld’,同样输出 Hello “W"orld
同理也可以在字符串里嵌入单引号,如"Hello 'W’orld”,输出 Hello 'W’orld

python面对对象编程

因为之前第一次接触面向对象编程所用的语言是JAVA,所以当用python写面向对象的代码时,会发现写法上还是有一些不同的。下面做一个简单的总结。

python类中构造函数:

Class Salary:
	basesalary =5000 #类变量,它的值将在这个类的所有实例之间共享。
	#你可以在内部类或外部类使用 Salary.basesalary  访问。
	def __init__(self,  salary):
     	self.salary = salary

self代表类的实例,而非类类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

init()方法是一种特殊的方法,类似于JAVA里面的构造器,当创建了这个类的实例时就会调用该方法

可以了解一下Python内置类属性,java中没有。

面向对象编程一个重要的优点就是代码的重用,这就要涉及到继承机制。
python里面的继承语法:

class 子类名(父类名)
    ...

python私有属性: __private_attrs,两个下划线开头,声明该属性为私有。在类内部的方法中使用时 self.__private_attrs。

Python不允许实例化的类访问私有数据,可以使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性

类的私有方法:__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods
此处省略1000字关于python继承相关机制的介绍【调皮】。

但我想总结一下python中的下划线
foo(前后双下划线): 定义的是特殊方法,一般是系统定义名字 ,类似 init() ,main()之类的。

_foo(前单下划线): 表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import

__foo(前双下划线): 表示的是私有类型(private)的变量

当然以上分享的这些并不是python的主干知识,学习一门知识深入了解他的主干还是十分重要的,从大树的主干,再到枝干,再到叶子都要做一个细致的梳理。这些小分享更像是叶子上的一滴水珠,衬托或者说点缀了叶子的美丽。

如果文章中有错误欢迎大家指正,也可以用邮箱联系我探讨。
[email protected]

发布了17 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44307764/article/details/102207649