python学习笔记

字符串(string)

字符串运算

加号+ :字符串拼接 “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'12)
-1

字符串函数

内置函数eval():接受一个字符串,并使用 Python 解释器来计算该字符串,例如:

>>> import math
>>> eval('math.sqrt(5)')
2.2360679774997898
>>> eval('type(math.pi)')
<class 'float'>

内置函数len(s):求长度
内置函数 ord :可以将字符转化成数值代码
函数chr:可以将数值代码转化成字符

文档字符串

“““ …
”””

列表list(动态可变,[ , ])

索引[ ]

运算

运算符 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):返回一个新的已排序的列表,原列表将保持不变。

bisect

二分算法模块

元组tuple(不可变的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 ,前者可以接受任意序列,并返回一个正序排列的新列表,后者则接受一个序列,返回一个可逆序迭代列表的迭代器。

字典(dict,动态,{key:value, })

字典是哈希的

运算符

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模块提供了操作文件和目录的函数(“os”代表“operating system”)
os.getcwd 返回当前目录的名称
os.path.abspath返回绝对路径
os.path.exists 检查一个文件或者目录是否存在
os.path.isdir 检查它是否是一个目录
os.listdir返回给定目录下的文件列表(以及其它目录)
os.path.join接受一个目录和一个文件名,并把它们合并成一个完整的路径

数据库

dbm模块提供了一个创建和更新数据库文件的接口,dbm 的一个限制在于键和值必须是字符串或者字节。

pickle模块

它能将几乎所有类型的对象转化为适合在数据库中存储的字符串,以及将那些字符串还原为原来的对象。
pickle.dumps读取一个对象作为参数,并返回一个字符串表示
pickle.loads (“load string”)可以重建对象

shelve模块

shell

md5sum 的命令

异常

try-except-else模块
pass语句:可在代码块中使用它来让Python什么都不要做

测试

模块unittest
raise 语句 能触发异常

random模块

函数 random 返回一个 0.0 到 1.0 之间的随机浮点数(包括 0.0 ,但是不包括 1.0 )

函数 randint 接受参数 low 和 high , 返回一个 low 和 high 之间的整数(两个都包括)。

choice函数 ,从一个序列中随机选择一个元素

time模块

time.time:返回当前格林威治标准时间

math模块

math.log10():计算分贝信噪比
math.log():计算以e为底的对数
math.pi
math.sin():求正弦
math.atan2(y,x):求arctan(y/x)的角度
math.sqrt():开二次方根
math.exp()
math.pow():接受底数和指数,求对数

turtle模块

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游戏设置

pygame.init() 初始化背景设置
screen=pygame.display.set_mode((number,number)):画一个屏幕,(number,number)是一个元组,其中为屏幕长和宽
方法pygame.event.get():监控鼠标和键盘的动作其中:
event.type == pygame.QUIT:表示鼠标点击窗口关闭
event.type == pygame.KEYDOWN:表示监视键盘行为:K_RIGHT键盘→

matplotlib

Django

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账户

使用Git进行版本控制

你可能感兴趣的:(语言,python)