Python 简明教程学习

python 简明教程

想着从头摸清python,发现学习不扎实,只能这样了。

print(‘hello world’),print默认换行

基础

  • 整数

  • 浮点数

  • 字符串

    • 字符串格式化输出format()

    • print('{0:.3f}'.format(1.2))#输出三位小数点
      print('{0:_^11}'.format('hello'))#两遍补齐,使得输出长度为11位
      print('{name}wrote{book}'.format(name='yangchao', book='a byte of python ')) #指定参数的方式格式化
      
    • print默认输出换行,使用end指定末尾空白

    • print('a', end='')
      print('b', end='')
      
    • 或者指定空格结尾

    • print('a', end=' ')
      print('b', end=' ')
      print('c')
      
  • 转义序列(escape sequence)

  • 原始字符串,即使转义也不认为转义了,就是把字符串原样输出

  • 变量

    • 标识符,首字母字符或下划线,其他字符可以是数字
    • 数据类型
    • 对象,python将程序中的任何内容统称为对象
  • 如果\在末尾,默认换行

  • 物理行和逻辑行

  • 缩进

运算符和表达式

表达式可以拆分为运算符(operators)和操作数(operands)

  • 运算符
  • 赋值和运算的快捷方式
  • 优先级

控制流

  • if

    • 通过input获得输入

    • x = input('enter your name: ')#先打印一句话然后可以输入并将值赋予x
      
  • while语句也有else

  • for循环也有else,基本都是循环结束后输出

  • range是一个生成器,一次生成一个

  • break,如果中断了一个for货while循环,else块也不会执行

  • Continue

函数

可重复使用的程序片段

  • 函数参数
  • 局部变量,作用域(scope)
  • Global
  • 默认参数值
  • 关键字参数
  • 可变参数,* 元组,**字典
  • return
  • pass
  • DocStrings,文档字符串

模块

可以使用C语言来撰写库,sys.argv的第一个参数时文件名,后面才是运行脚本的参数

import sys#文件名为module_using_sys.py
print('the command line arguments are :')
for i in sys.argv:
  print(i)

打印为:

$ python module_using_sys.py we are arguments
The command line arguments are:
module_using_sys.py
we 
are
arguments
  • 按字节码编译的.pyc文件

    • 导入模块代价高昂,创建按字节码编译的文件,是将python转化为中间形式的文件
  • from .. import 语句

  • 模块的__name__

    • 当模块第一次被倒入时,它所包含的代码将被执行,模块的名称帮我们以不同的方式运行

    • if __name__ == '__main__':
        print('this program is being run by itself')
       else:
        print('this program is imported from another module')
      
  • 编写自己的模版,避免使用from mymodule import *,python的一大指导原则是明了胜过晦涩

  • dir函数,返回对象所定义的名称列表

  • 包。变量位于函数内部,函数位于模版内部,模版在包中

数据结构

  • 列表
  • 元组
  • 字典
  • 序列
  • 集合
  • 引用,直接赋值是同一个对象,切片操作就是复制一个新的对象
x = ['xiaoming', 'er', 'dir']
y = x
print(y)#
y.remove('er')
print(y, x)#此时y和x都删除了一个元素,因为他们是同一个对象
z = x[:]#这时候就不是同一个对象了,复制了一个新的对象
  • 更多关于字符串的东西
    • 字符串也是一个对象,有自己的方法
    • find找到某些子字符串
    • starwith查看是否由某些子字符串开头

以上都是一些基本知识,下面开始讲一些编写程序的东西

解决问题

问题

  • 首先是问题的提出,明白自己要达到的目的
  • 其次是分析,要达到目的需要做些什么
  • 然后列出所需要实现的一些模块

本文题:一个备份文件的程序 分析:

* 选择备份文件
* 备份操作
* 备份保存
* 备份文件重读
* 备份文件恢复

八月总结

shiguan:试管

haijunluzhandui:海队

​ 子衿(郑风)

青青子衿,悠悠我心。

纵我不往,子宁不嗣音

青青子佩,悠悠我思

纵我不往,子宁不来

挑兮达兮,在城阙兮

一日不见,如三月兮

一个月来我念得最多的一首诗,我最喜欢的一首诗,虽然来自女性,但我的思念也同样一日不见,思之如狂。

八月的长沙,是暴雨频频的季节,天空总是阴沉沉的,偶尔看见太阳都是幸运的,跟别说洪水泛滥的长沙给人多少的阴冷和冰凉。路边的大树,在风雨中左摇右摆,每次都要倒下去了,却像不倒翁一样坚强地立了起来,可能每个人这时候都感叹一句,“还真当自己是杨树啊,倒下去不就好了吗“。jun人的身份,让我们就是倒下去也要站起来,不仅是责任和担当,更是使命。

从长沙开往湛江的火车时空调车的,没有卧铺,硬座也是可以想办法睡觉的。火车上不是很好睡觉,特别是半夜的时候,困得不省人事,但是我知道自己并没有睡着,我安静地坐着,脑袋里没有思考,空调吹得有些许的冷,我也不怕,接下来一个月有空调吹应该是最幸福的事吧,乘此机会好好享受一下。

都说budui是一个现实的不讲道理的地方,但是我心中还有诗和远方,蓝天、白云、沙滩,都和度假旅游是一样的风景,甚至连直挺挺的槟郎树也随处可见,诗并不是很远。太阳直勾勾地盯着我,而我在它眼皮子下站了半小时jun姿,眼见着皮肤变黑,衣服发烫,但是眼睛变得有神,腰杆变得挺直。不知道太阳是兴奋还是激动,一点都不被我额头上的汗所感动,反而变得愈发强烈,它是想把所有的光芒一次全照射下来吗。我感觉我看见了自己变黑的过程,皮肤都有点裂痕了,心里面更是如此。焦急地等待时间的结束,一分一秒地数着日子,听见秒针滴答滴答地想,我脑袋一片空白,感觉身体少了许多能量,头脑开始发热,世界也变得阴沉下来,我的腿跟着就软了下来。眼看情况不对,我咬咬牙,像是给自己打鸡血,一下就又挺住了。我真恨自己怎么还没倒下,真恨自己怎么还站着,真恨自己怎么一点脾气都没有了。脾气是什么,只是一时的宣泄,而意志的磨练,让我在往后的日子越来越坚强。

junying是用来训练的,是用来成长的,在这里有吃不完的苦,有干不完的活,有听不尽的批评,有出不完的差。拔草,拔草,我拔过的草比吃过的饭还多,我拔草的时间比我吃饭的时间还多,我很想说一句,我来这里学会了一个技能叫拔草。小时候爸妈常说,努力学习,不然以后只能当农民,但是我却来拔草了。这是命令,jun人就应该服从命令,听从指挥,我不能反驳,我不能因为自己的高傲就不干活,我更不能看着自己兄弟在拔草我一个人休息,拔草是暂时的需要,是暂时的任务,必须完成,我不完成,还是需要人来做,我没有更骄傲,我没有什么资本觉得这是别人可以干的活而我不能干。是的,我心中在抱怨,但是我还是把活干了,我还是流着一身的汗,背对着太阳直射,用已经劳累的后背弯下腰拔草,心里一万个不愿意,一万个想回家,一万个想妈妈。排长说得对,抱怨是正常的事,抱怨后服从命令就事成长。junying是budui,junying也是家,家里的人都是亲人,没有谁高人一等,我的高傲是自己给自己的,不是我争取来的,融入家庭,贡献自己的力量,我就能争取到尊重和荣誉。

在回家的路上,我坐上了同一辆火车,很好,有空调,我想我可能需要永远离开这个地方了,我还是在心里抱怨这个地方,终于离开了,我转念一想,我还能回来吗?火车从广东穿过广西,一路上有很多风景,天空也慢慢多了白云,太阳还是一样的毒辣,山上长满了绿树,溪流也异常清澈,而我却苟活在空调车里,这个人类最伟大的发明之一,我不知道还能伟大多久。火车跑得很快,我离开这里也越来越远,即将回到学校,不,回到另外一个junying,在这里我需要在空调屋里奋斗,看数百篇论文,熬夜加班会成为我的家常便饭,刚过去的一个月应该是清闲与轻松。看我,总是看着锅里的吃着碗里的,哪里都是抱怨,在哪里都不自在,这个世界是容不下我了吧。我因此睡不好觉,我因此发狂,我对自己好不满意,我焦头烂额地想回来,又焦头烂额地想着怎么活下去。幸运的是,我从中解救了出来,浴火重生,我的思想变得更加纯粹。抱怨只是我一厢情愿,生活还在继续,同样是干不完的活,同样是出不完的差,抱怨只会影响我的心情。静下心来,这里有知识,这里蕴含着我千千万万的好奇,这里有我支撑着活下去的力量。其实不只是这里,我是人类,我是可以被挑战的,我是可以灵活地生活在任何地方的,抱怨只会给我负能量。扎扎实实提高自己,珍惜每一分钟,别让抱怨影响自己。

看着镜子里的自己,我黝黑的皮肤,清澈明亮的眼睛,我的眼神更加坚定,我的身心更加健康,我的意志燃烧了起来。

微分几何初步理解

解微分方程,很多时候都不好求解,但是从几何的角度就很容易解释,虽然可能不能得到精确的表达式,但是从几何的角度很容易得到解方程的性质。

比如说:$y^{‘}=1+x-y$这个方程看起来简单但是不好求解,但是我们可以从几何的角度解释。

$f(x, y) = 1+x-y$表示一个方向场,在每一个点都有一个方向,或者说斜率,而$y^{‘}$表示的是解函数(我们假设解为$y_1(x)$)的斜率,所以解函数就是,斜率和方向场相同的曲线,或者叫做,积分曲线。

要证明微分方程的解就是方向场的积分曲线也可以简单说明下。

  • 首先微分方程的解肯定是满足微分方程的。
  • 也就是说,满足微分方程的函数就是微分方程的解。
  • 另一方面,方向场的积分曲线斜率都是和解函数的斜率一样的。

下面我们就来画画这个方向场和积分。

  • 计算机在画方向场的时候,
    • 取一个点$(x, y)$,
    • 计算$f(x, y)$,
    • 画图
  • 人在画方向场的时候,是和计算机不一样的,
    • 去一个方向,$f(x, y) = C$,然后画出$x, y$曲线,并标上方向,这样的线,叫做等斜线。
    • 然后更换C,画出其他所有的等值线。这样一来,速度就块多了。

所以,我们继续看这个例子。

$$ f(x, y)=1+x-y = C , y = x+1-c, $$

如图,是$C\in [-4:6:2]$,箭头表示此处的方向场,也就是$C$,$C$代表的是斜率。所以,每一条直线又叫做等斜线。

weifenfangcheng-1

我们把线画得更多一点)

积分曲线就是沿着一个方向的曲线。

Using Octopress

这篇文章参考了生命之氢

新建一个github.io

  1. 创建了域名后千万不要在其他地方引用,不然会很麻烦,push 需要pull, pull 前需要branch, 反正就是各种麻烦事,把它当做最干净的时候用来写博客可以免去很多麻烦
  2. 新建后只需要ssh , 连密码都不用,当然最好是有一个git客户端,但是千万别把github.io 从客户端放到本地,一定要从octopress。

合并远程仓库

在octopress中,是有两个仓库的,一个是source,用来存放后台代码的,一个是master,也就是主分支,是前端显示的。

我们刚开始在github是建立了一个远程仓库的,第一次使用的时候是还没有将远程仓库和本地仓库合并的,这是两个不同的仓库,会提示unrelated histories,所以这时候需要先使用

cd _deploy
git pull origin master --allow-unrelated-histories

更换octopress 主题,

  1. 先把source 中atom.xml 和robots.txt中的nil 改成null

添加上公式

需要mathjx支持,不知道能不能有用。

$$f(x) = \sin(x)\int_{0}^{1}\sum \cos(x)dx$$

显然是没有用的。$\sin(x)$

$$f(x) = \int^{10}_0\sin(x)dx$$

但是修改最后一句javascript这样的代码后就可以了,主要原因是mathjax的那个source更新了。加载非常慢,我是放在script.html中的,千万别放在head.html中,会后悔的,加载特别慢。另外,如果翻墙,公式加载也非常慢,直接访问网站会快很多。其实不更改markdown 也没关系的。但是注意改又花括号的地方时不能省略的。

$$f(x) =x\cdot y$$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- mathjax config similar to math.stackexchange -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  jax: ["input/TeX", "output/HTML-CSS"],
  tex2jax: {
    inlineMath: [ ['$', '$'] ],
    displayMath: [ ['$$', '$$']],
    processEscapes: true,
    skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
  },
  messageStyle: "none",
  "HTML-CSS": { preferredFont: "TeX", availableFonts: ["STIX","TeX"] }
});
</script>
<script type="text/javascript" async
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
</script>

另外,在_config.yml中markdown的解释器换了后,要注意这时候的语法有一点不一样,就是公式中$$ 必须单独成行,代码块前后面也必须要有空行。

据说代码块也是有问题的,我要一起测试测试

1
2
3
4
5
6
import torch
import torch.nn
class g(nn.Module):
    def __init__(self):
        super(g, self).__init__()

确实,好像没有高亮。

原来是主题的原因,不过比较简洁,还是能够接受的,

插入图片

插入的图片放在/octopress/source/images/下,在引用的时候

1
![](/images/image.img)

提升速度

使用谷歌的源加载速度特别慢。

具体的就是把source/include/head.html和source/include/custom/head.html中的fonts.google.com和ajax.google.com都替换成userso.com然后就Okay,速度哗哗的

添加七牛图床

这个跟octopress无关。

下载qshell,将文件放在/usr/local/bin/下,然后在终端操作

qshell account ak sk#ak和sk分别是账户和密码这样就能生成账户文件

这时候可以在任何位置使用qshell命令

qshell qupload hello.txt#hello.txt是配置文件,这个配置文件是包含了上传信息的。参见qupload文档说明。

Ocotopress 使用

生成代码和提交

bundle exec rake generate#生成
bundle exec rake deploy#提交
bundle exec rake gen_deploy#生成和提交
#每次修改后都把原始文件都提交到 source 源码中
git add . 
git commit -m '备注内容'
git push origin source 

新博客和新页面

bundle exec rake new_post[new_post]#新博客
bundle exec rake new_page[new_page]#新页面
#在source/_includes/custom/navigation.html 中添加
<li><a href="/your-title/new_post">new_post</a></li>#以添加页面到导航栏