加号+ :字符串拼接 “apple”+“watch”为“applewatch”
乘号* :执行重复运算 “apple”*3 为“appleappleapple”
索引:[ ]
布尔运算法in(letter,word),如
>>> 'a' in 'banana'
True
>>> 'seed' in 'banana'
False
字符串方法的文档
str.lstrip( ):删除开头空格
str.rstrip( ):删除结尾空格
str.strip( chars):返回删除前导字符和尾随字符的字符串副本。chars参数是一个字符串,指定要删除的字符集。如果省略或没有,chars参数默认是删除空格。chars参数不是前缀或后缀;相反,它的值的所有组合被剥离。例如:
>>> ' spacious '.strip()
'spacious'
>>> 'www.example.com'.strip('cmowz.')
'example'
str.replace(old, new[, count]):将字符串中的特定单词都替换为另一个单词
str.split():根据一个字符串创建一个单词列表,以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中。分隔符可指定。
str.join( ):将一个字符串列表的元素拼接起来
>>> t = ['pining', 'for', 'the', 'fjords']
>>> delimiter = ' '
>>> s = delimiter.join(t)
>>> s
'pining for the fjords'
str.count(sub[, start[, end]]):返回范围[start, end]中子字符串不重叠的次数。可选参数start和end被解释为片表示法。
str.islower():如果字符串中所有大小写字符都是小写则返回True,至少有一个大小写字符,返回False。
str[: :-1]:一个字符串切片可以接受指定步长的第三个索引; 也就是连续字符间空格的个数。步长为2,意味着每隔一个字符;步长为3,意味着每隔两个字符。此切片生成一个倒序的字符串。
str.upper( ):接受一个字符串,并返回一个都是大写字母的新字符串。
str.word( letter,num1,num2):从索引num1处开始查找letter,num2处结束,返回索引;搜索失败返回-1
>>> word = 'banana'
>>> index = word.find('a')
>>> index
1
>>> word.find('na')
2
>>> word.find('na', 3)
4
>>> name = 'bob'
>>> name.find('b', 1, 2)
-1
内置函数eval():接受一个字符串,并使用 Python 解释器来计算该字符串,例如:
>>> import math
>>> eval('math.sqrt(5)')
2.2360679774997898
>>> eval('type(math.pi)')
<class 'float'>
内置函数len(s):求长度
内置函数 ord :可以将字符转化成数值代码
函数chr:可以将数值代码转化成字符
“““ …
”””
索引[ ]
运算符 in:
>>> cheeses = ['Cheddar', 'Edam', 'Gouda']
>>> 'Edam' in cheeses
True
>>> 'Brie' in cheeses
False
运算符+:拼接多个列表
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = a + b
>>> c
[1, 2, 3, 4, 5, 6]
运算符 * :给定次数重复一个列表
>>> [0] * 4
[0, 0, 0, 0]
>>> [1, 2, 3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
del list[index]:删除列表中元素
布尔运算符:is判断是否指向同一对象
list.append(value):添加一个新元素到列表的末端
list.extend(list):接受一个列表作为参数,并将其其中的所有元素添加至目标列表中。
list.sort():将列表中的元素从小到大进行排序,无返回值
value=list.pop(index ):修改列表,并返回被移除的元素。如果你不提供下标,删除列表末端元素,并赋值给value
list.remove( value):已知要删除的元素,删除该元素,返回None
len(list):列表长度
sum(list):求和
list(str):将字符串分割成单独的字符,组成列表
sorted(list):返回一个新的已排序的列表,原列表将保持不变。
二分算法模块
语法上,元组是用逗号隔开一系列值:
>>> t = 'a', 'b', 'c', 'd', 'e'
>>> t = tuple()
>>> t
()
>>> (0, 1, 2) < (0, 3, 4)
True
>>> (0, 1, 2000000) < (0, 3, 4)
True
内建函数 divmod 接受两个实参,返回包含两个值的元组:商和余数
函数可以接受可变数量的参数。 以 “*” 开头的形参将输入的参数 汇集 到一个元组中。
def printall(*args):
print(args)
>>> printall(1, 2.0, '3')
(1, 2.0, '3')
与汇集相对的,是 分散(scatter) 。 如果你有一个值序列,并且希望将其作为多个参数传递给一个函数, 你可以使用运算符*。 例如,divmod 只接受两个实参; 元组则无法作为参数传递进去:
>>> divmod(*t)
(2, 1)
zip是一个内建函数,可以接受将两个或多个序列组,并返回一个元组列表, 其中每个元组包含了各个序列中相对位置的一个元素
内建函数 enumerate :遍历一个序列的元素以及其索引号
内建函数 sorted 和 reversed ,前者可以接受任意序列,并返回一个正序排列的新列表,后者则接受一个序列,返回一个可逆序迭代列表的迭代器。
字典是哈希的
in操作符:它可以用来检验字典中是否存在某个 键 (仅仅有这个值还不够)
dict.items()方法: 将字典变为含有(键,值)元组的列表
dict.keys()方法: 提取字典的键为列表
dict.values()方法:将字典中值提取为列表
dict.get()方法:接受一个键和一个默认值作为参数。 如果字典中存在该键,则返回对应值;否则返回传入的默认值。
字典有一个叫做 items 的方法,它返回由多个元组组成的序列,其中每个元组是一个键值对
添加元素:dict[key]=value
函数sorted(dict.keys()): 对字典的键进行排序
集合set():可让Python找出列表中独一无二的元素,并使用这些元素来创建一个集合
字典列表: [{ },{ }, ]
python 3 中为函数 input( )
python 2 中为函数 raw_input( )
算数运算符:
% 求余 + 加 - 减 * 乘 / 除(python3中除所得为浮点数)
** 乘方
// 地板除,求整
% 求余
位运算符:
^ XOR
关系运算符:
x != y # x 不等于 y
x > y # x 大于 y
x < y # x 小于 y
x >= y # x 大于或等于 y
x <= y # x 小于或等于 y
逻辑运算符:
and 、or 和 not
整数型(int)
浮点数(float)
字符串(str)
函数type( ):用于确定值的类型
函数fin=open( “file_name”):打开任意文件,并返回一个文件对象fin
\r\n代表两个空白字符,回车和换行
fin.readline():从文件中读取字符直到碰到新行,并将结果作为字符串返回
格式化运算符
format方法
内建函数 repr 接受任意一个对象作为参数,然后返回一个该对象的字符串表示。对于空白符号
转换不同格式文件的应用
os模块提供了操作文件和目录的函数(“os”代表“operating system”)
os.getcwd 返回当前目录的名称
os.path.abspath返回绝对路径
os.path.exists 检查一个文件或者目录是否存在
os.path.isdir 检查它是否是一个目录
os.listdir返回给定目录下的文件列表(以及其它目录)
os.path.join接受一个目录和一个文件名,并把它们合并成一个完整的路径
dbm模块提供了一个创建和更新数据库文件的接口,dbm 的一个限制在于键和值必须是字符串或者字节。
它能将几乎所有类型的对象转化为适合在数据库中存储的字符串,以及将那些字符串还原为原来的对象。
pickle.dumps读取一个对象作为参数,并返回一个字符串表示
pickle.loads (“load string”)可以重建对象
md5sum 的命令
try-except-else模块
pass语句:可在代码块中使用它来让Python什么都不要做
模块unittest
raise 语句 能触发异常
函数 random 返回一个 0.0 到 1.0 之间的随机浮点数(包括 0.0 ,但是不包括 1.0 )
函数 randint 接受参数 low 和 high , 返回一个 low 和 high 之间的整数(两个都包括)。
choice函数 ,从一个序列中随机选择一个元素
time.time:返回当前格林威治标准时间
math.log10():计算分贝信噪比
math.log():计算以e为底的对数
math.pi
math.sin():求正弦
math.atan2(y,x):求arctan(y/x)的角度
math.sqrt():开二次方根
math.exp()
math.pow():接受底数和指数,求对数
bob=turtle.Turtle()函数:创建一个Turtle对象,有返回值,打开画图窗口
turtle.mainloop()函数:告诉窗口等待用户操作,没有此函数,程序会出bug,其wait for the user to close the window
bob.fd (100):向前走100像素,bk向后,
bob.lt (角度):左转,rt右转
bob.pu():抬笔 bob.pd( ):落笔
bob.hideturtle():隐藏箭头
bob.goto(x,y):将画笔移动到坐标为x,y的位置
bob.stamp() #复制当前图形
bob.speed(speed) #画笔绘制的速度范围[0,10]整数
pensize(width) #绘制图形时的宽度
color(colorstring) #绘制图形时的颜色
fillcolor(colorstring) #绘制图形的填充颜色
fill(Ture)
fill(false)
pygame.init() 初始化背景设置
screen=pygame.display.set_mode((number,number)):画一个屏幕,(number,number)是一个元组,其中为屏幕长和宽
方法pygame.event.get():监控鼠标和键盘的动作其中:
event.type == pygame.QUIT:表示鼠标点击窗口关闭
event.type == pygame.KEYDOWN:表示监视键盘行为:K_RIGHT键盘→
1、建立虚拟工作环境
为项目新建一个目录,命名为learning_log,切换到构建的该目录下,构建名为11_env的虚拟环境并激活:
cd learning_log
python -m venv 11_env
cd 11_env
cd Scripts
activate
停止使用虚拟环境:
deactive
2、激活虚拟环境后,在learning_log目录下新建一个名为learning_log的项目,dir看创建了哪些文件:
django-admin startproject learning_log .
dir
文件夹learning_log里会新建一个名为learning_log的文件夹和manage.py文件(这是一个简单的程序,它接受命令并将其交给Django的相关部分去运行)
项目文件夹learning_log包含4个文件,其中最重要的是settings.py、urls.py和wsgi.py。文件settings.py指定Django如何与你的系统交互以及如何管理项目。在开发项目的过程中,我们将修改其中一些设置,并添加一些设置。文件urls.py告诉Django应创建哪些网页来响应浏览器请求。文件wsgi.py帮助Django提供它创建的文件,这个文件名是web server gateway interface(Web服务器网关接口)的首字母缩写。
3、创建供项目learning_log使用的数据库:
python manage.py migrate
dir
Django将在当前目录创建新文件db.sqlite3。SQLite是一种使用单个文件的数据库,是编写简单应用程序的理想选择。
python manage.py runserver
Djangp启动一个服务器,获得项目的URL。
URL或者URL
按Ctrl+C可关闭服务器。
4、添加应用程序
4.1 将终端切换到manage.py所在的目录。激活虚拟环境后,执行命令startapp:
python manage.py startapp learning_logs
dir
命令startapp learning_logs让Django建立创建应用程序所需的基础设施。如果现在查看项目目录,将看到其中新增了一个文件夹learning_logs。打开这个文件夹,Django创建了多个文件。其中最重要的文件是models.py、admin.py和views.py。
使用models.py来定义要在应用程序中管理的数据,模型告诉Django如何处理应用程序中存储的数据。在代码层面,模型就是一个类,就像前面讨论的每个类一样,包含属性和方法。
4.2 定义模型,打开文件models.py,存储时间戳和主题
class Topic(models.Model):
text=models.CharField(max_length=200)
date_add=models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.text
参考可在模型中使用的各种字段:
Django Model Field Reference
4.3 将应用程序包含到项目中,激活模型。打开settings.py,在INSTALLED_APPS添加创建的应用程序learning_logs
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#我的应用程序
'learning_logs',
)
接下来:
让Django修改数据库,存储与模型Topic相关的信息:
python manage.py makemigrations learning_logs
python manage.py migrate
每当需要修改管理的数据时,都采取如下三个步骤:修改models.py;对learning_logs调用makemigrations;让Django迁移项目。
5、管理网站
5.1 创建超级用户,设置用户名和密码:
python manage.py createsuperuser
5.2 向管理网站注册模型
对于在models.py中创建的模型Topic,进行手工注册。创建应用程序learning_logs时,在models.py所在目录下创建了一个名为admin.py的文件,打开它注册:
from django.contrib import admin
from learning_logs.models import Topic
admin.site.register(Topic)
使用超级账户访问:管理网站
通过Add往模型Topic中添加内容
5.3 定义与Topic相关联的模型Entry,存在一个topic关联多个entry
class Entry(models.Model):
topic=modles.ForeignKey('Topic',on_delete=models.CASCADE)
text=models.TextField()
date_add=models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural='entries'
def __str__(self):
return self.text[:50]+"..."
接下来,再次迁移数据库:
python manage.py makemigrations learning_logs
python manage.py migrate
向管理网站注册Entry:
from learning_logs.models import Topic,Entry
admin.site.register(Entry)
返回,网页中出现新的连接Entries,与topic相联系。
5.4 通过Django shell在终端查看数据
启动一个python解释器:
python manage.py shell
可导入模型,查看内容:
from learning_logs.models import Topic
Topic.objects.all()
遍历查询集:
topics=Topic.objects.all()
for topic in topics:
print(topic.id,topic)
获得添加的主题id,获取该对象,查看属性:
t=Topic.objects.get(id=1)
t.text
t.date_added
t.entry_set.all()
退出shell,按Ctr+Z,再按Enter
5.5 shell访问项目中的数据。查询数据的文档
6、创建网站主页
使用Django创建网页的过程通常分三个阶段:定义URL、编写视图和编写模板
6.1 改主页url,打开learning_log中的文件urls.py:
from django.contrib import admin
from django.urls import include,path
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'',include(('learning_logs.urls','learning_logs'),namespace='learning_logs')),
]
在文件夹learning_logs中创建另一个urls.py文件:
from django.conf.urls import url
from . import views
urlpatterns=[
url(r'^$',views.index,name='index'),
]
6.2 编写视图,打开learning_logs中的view.py文件:
def index(request):
return render(request,'learning_logs/index.html')
6.3 编写模板,在文件夹learning_logs中新建一个文件夹,并将其命名为templates。在文件夹templates中,再新建一个文件夹,并将其命名为learning_logs。在新建的learning_logs里新建一个文件index.html
<p>Learning Log</p>
<p>Learning Log helps you keep track of your learning, for any topic you're
learning about.</p>
打开网页
7、创建其它网页
7.1 创建一个包含网页通用元素的父模板。创建一个名为base.html的模板,并将其存储在index.html所在的目录中。文件base.html写入:
<p>
<a href="{% url 'learning_logs:index' %}">Learning Log</a>
</p>
{% block content %}{% endblock content %}
接下来,构建子模板,改写index.html:
{% extends "learning_logs/base.html" %}
{%block content %}
<p>Learning Log helps you keep track of your learning, for any topic you're
learning about.</p>
{% endblock content %}
7.2 显示所有主题的页面
URL
7.2.1 修改learning_logs里的urls.py文件:
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^topics/$', views.topics, name='topics'),
]
在view.py文件中构建topics()函数,定义视图:
rom django.shortcuts import render
from .models import Topic
# Create your views here.
def index(request):
return render(request,'learning_logs/index.html')
def topics(request):
topics=Topic.objects.order_by('date_added')
context = {'topics':topics}
return render(request,'learning_logs/topics.html',context)
在index.html目录下创建新文件topics.html:
{% extends "learning_logs/base.html" %}
{%block content %}
<p>Topics</p>
<ul>
{% for topic in topics %}
<li>{{ topic }}</li>
{% empty %}
<li>No topics have been added yet.</li>
{% endfor %}
</ul>
{% endblock content %}
修改父模板base.html,使其包含到显示所有主题的页面的链接:
<p>
<a href="{% url 'learning_logs:index' %}">Learning Log</a> -
<a href="{% url 'learning_logs:topics' %}">Topics</a>
</p>
{% block content %}{% endblock content %}
7.3 显示特定主题的页面
修改learning_logs中的urls.py:
urlpatterns=[
url(r'^$',views.index,name='index'),
url(r'^topics/$',views.topics,name='topics'),
url(r'^topics/(?P\d+)/$' ,views.topic,name='topic'),
]
修改view.py文件,新增topic()函数:
def topic(request,topic_id):
topic=Topic.objects.get(id=topic_id)
entries=topic.entry_set.order_by('-date_added')
context = {'topic':topic,'entries':entries}
return render(request,'learning_logs/topic.html',context)
新建topic.html文件:
{% extends 'learning_logs/base.html' %}
{% block content %}
<p>Topic: {{ topic }}</p>
<p>Entries:</p>
<ul>
{% for entry in entries %}
<li>
<p>{{ entry.data_added|dare:'M d, Y H:i' }}</p>
<p>{{ entry.text|linebreaks }}</p>
</li>
{% empty %}
<li>
There are no entries for this topic yet.
</li>
{% endfor %}
</ul>
{% endblock content %}
修改topics.html:
<p>Topics</p>
<ul>
{% for topic in topics %}
<li>
<a href="{% url 'learning_logs:topic'topic.id %}">{{ topic }}</a>
</li>
{% empty %}
<li>No topics have been added yet.</li>
{% endfor %}
</ul>
生成的新页面
Django模板文档
使用Linux或Windows系统的初学者可使用Geany;
使用OS X的初学者可使用Sublime Text(它在Linux和Windows系统中的效果也很好);
Python自带的编辑器IDLE。
Emacs和vim是两款流行的编辑器,深受众多经验丰富的程序员的喜爱
Stack Overflow
python官方文档
python官方
官方库文档
r/learnpython
程序员通过IRC(Internet Relay Chat)实时地交流,建立IRC账户