>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
程序猿的八荣八耻,也就是价值观的东西。honestly我好多地方没看懂,又是一个需要反复阅读来确定自己成长的地方。
运算符有一目运算符
比如a='154a'
这样的赋值过程就是典型的一目运算,用一个符号来完成运算
再比如
>>> a=[15,44,2]+[7,8,44]
[15, 44, 2, 7, 8, 44]
>>> a=set([15,44,2]+[7,8,44])
{2, 7, 8, 44, 15}
>>> print(a) if a! = {} else print("你怎么回事啊老弟?")
[15, 44, 2, 7, 8, 44]
1. 列表类型的合并操作,就是一个二目运算;
2. 第二个例子体现了集合运算时的去重和无序的特点;
3. <表达式1> if <条件> else <表达式2> 这样的结构就是最典型的三目运算符
在这里不得不提到True False None 以及 and or not
偷个懒,布尔运算的讲解在 http://www.liujiangblog.com/course/python/18 这里;
逻辑运算符与或非的讲解在 http://www.liujiangblog.com/course/python/14 这里
非常感谢有前辈能仔细讲解系统级的知识,本着不重复造轮子的精神,我将其知识成果贴出,只考虑自己对于某些细节或是原理级别的理解,在此定义自己写博客的目标是进一步的总结归纳,对前人没有写过或写的不好的地方深入思考,写原创内容,否则仅贴出链接。只是自己的笔记,不另作他用。
再次感谢刘江老师 http://www.liujiangblog.com/ 和
廖雪峰老师 https://www.liaoxuefeng.com/
python中的对象包含三要素:id、type、value 其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值
is判断的是a对象是否就是b对象,是通过id来判断的
==判断的是a对象的值是否和b对象的值相等,是通过value来判断的
如果 a=10;b=a; 则此时 a 和 b 的内存地址一样的;
但当 a=[1,2,3]; 令 b=a[:] 时,虽然 a 和 b的值一样,但内存地址不一样。
http://www.runoob.com/note/33502
try用于有可能出错的语句,即尝试运行的意思,如果出错,就运行except中的语句
在正常运行时 执行语句块1
并奖励性的执行语句块3
出现错误时 执行语句块2
但不论出不出现错误
都会执行语句块4
上边的这种写法叫伪代码,起着厘清思路、传递思想的作用,一串好的伪代码应该可以让任何熟悉此编程语言的人都能将其转换为算法,可以说伪代码就是算法的文字版本。在算法的构建过程中起着非常重要的作用。任何代码写出来都要有相当的可读性,因此伪代码也有相应的书写规范(https://blog.csdn.net/victoryzn/article/details/79102382)
著名的瑞士计算机科学家Niklaus Wirth曾说Algorithms+Data Structures=Programs(算法加数据结构等于程序),但是否不论是算法还是数据结构,我现在都一无所知,对于python的学习不能浮于表面,毕竟python基于C所编写,要深刻理解程序对于内存的调用,乃至整个计算机科学(computer science)的发展历史,对于以往只是了解宏观物理的我来说,还是一个巨大的挑战啊
扯远了,来继续讲python关键字的事情
break和continue:
简单来说,break跳出并结束当前循环,执行循环后边的语句。注意它不管你这层循环里边写了什么,看到break就跳出。从语句块内部和外部的相对关系来说,如果是两层以上的嵌套结构,它跳出的是向上查找最近的一个循环,请根据此特性来编写程序。
continue结束当次循环,并继续执行后续次数的循环。也就是说,如果这次循环的结果和其他循环结果不同,可以通过此关键字来设置报错/打印/执行其他函数或语句等功能。
break和continue与for和while循环搭配使用,效果更好。
更多用法有待探索
(a HTML还是蛮容易上手的,这个markdown editor可玩性丰富23333)
递归最核心的思想是:每一次递归,整体问题都要比原来减小,并且递归到一定层次时,要能直接给出结果!
明白吗!这和编程的工程思想是一致的,问题不能直接求解时将其分解为更小的问题,循环此原则
理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。(那只是对于老手,适应了此逻辑的人而言,我可是想了半天才明白)
递归所遵循的设计原则:
- 初始化算法。递归程序通常需要一个开始时使用的种子值(seed value)。可以向函数传递参数,或者提供一个入口函数,这个函数是非递归的,但可以为递归计算设置种子值。
- 检查要处理的当前值是否已经与基线条件相匹配(base case)。如果匹配,则进行处理并返回值。
- 使用更小的或更简单的子问题(或多个子问题)来重新定义答案。使用更小的或更简单的子问题(或多个子问题)来重新定义答案。
- 对子问题运行算法。对子问题运行算法。
- 将结果合并入答案的表达式。将结果合并入答案的表达式。
- 返回结果。返回结果。http://www.liujiangblog.com/course/python/34
仅使用for循环实现阶乘函数
这里的知识点是关于函数的定义:形参,实参和动态参数*args **kwargs http://www.liujiangblog.com/course/python/31
如果用递归实现阶乘功能呢:
def fact(n):
if n<=1:
return 1
return n*fact(n-1)
print(fact(10))
3628800
变量作用域:
L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域
也就是说:
局部变量和全局变量是不同变量;局部变量是函数内部的占位符,与全局变量可能重名但不同
函数运算结束后,局部变量被释放
使用global保留字在函数内部使用全局变量,使用nonlocal关键字,可以使用嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量。 http://www.liujiangblog.com/course/python/32
尝试了一下图片的居中和大小控制操作,代码如下
<div align=center><img src="https://..." width=60% height=60% alt="..." />
align=center/left/right 对应图片的居中靠左和靠右对齐
学会使用OS库,可以做很多事情,比如我们使用这个脚本,就不在pip中一个个地安装库了
由于网络原因可能会安装失败,这时修改pip源会有很大的帮助
import os
libs = {"numpy","matplotlib","pillow","sklearn","requests",\
"jieba","beautifulsoup4","wheel","networkx","sympy",\
"pyinstaller","django","flask","werobot","pyqt5",\
"pandas","pyopengl","pypdf2","docopt","pygame"}
try:
for lib in libs:
os.system("pip3 install "+lib)
print("Successful")
except:
print("Failed Somehow")
Wordcloud是非常好用的一个文本数据可视化库,配上中文分词库jieba(不知为何叫结巴)可以制作出很漂亮的图片
举个例子:
import jieba
import wordcloud
from scipy.misc import imread
mask = imread("Sakamoto.jpg")
excludes = { }
f = open("庆余年.txt", "r", encoding="utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = " ".join(ls)
w = wordcloud.WordCloud(\
width = 1080, height = 720,\
background_color = "white",
font_path = "C:\Windows\Fonts\msyh.ttc", mask = mask
)
w.generate(txt)
w.to_file("庆余年.jpg")
我知道相当乱,我会再整理的!