用了好久python,还没有完整看过官方的tutorial,这几天抽空看了下,还是学到些东西

---

Table of Contents

1 课前甜点

  • Python 代码通常比 C 系语言短的原因
    1. 高级数据类型允许在一个表达式中表示复杂的操作
    2. 代码块的划分是按照缩进
    3. 不需要预定义变量

2 使用 Python 解释器

 

2.1 调用解释器

  • EOF unix C-d windows C-z
  • 执行 Python 代码 python -c command [arg]
  • 把 Python 模块当脚本使用 python -m module [arg]
  • 执行脚本后进入交互模式 python -i 1.py

2.1.1 传入参数

  • sys.argv sys.argv[0] 是程序名

2.1.2 交互模式

2.2 解释器的运行环境

 

2.2.1 源文件的字符编码

  • 默认编码就是 utf-8 必须放在第一行或者 UNIX “shebang” 后

3 Python 的非正式介绍

  • 注释 #

3.1 Python 作为计算器使用

 

3.1.1 数字

  • 除法 / 永远返回浮点数类型 // floor division
  • 乘方 **
  • 交互模式下,上一次被执行显示的表达式的值会被保存在 _
  • Python 内置对复数的支持 3+5j

3.1.2 字符串

  • 原始字符串
  • 三重引号会自动包含换行,可以在行尾加反斜杠防止换行
  • 相邻的两个字符串字面值会自动连接到一起
  • 通过索引取得的单个字符是一个长度为一的字符串
  • 切片中越界索引会被自动处理
  • Python 中字符串是不可修改的,如果需要一个不同的字符串,应当新建一个 a = “heheda” b = a[:-1] + “b”

3.1.3 列表

  • 列表的切片都返回一个新列表
  • 列表支持使用 + 拼接其他列表
  • 可以给列表切片赋值,这样可以改变列表大小,甚至清空整个列表

    a = [1, 2, 3, 4]
    a[1:3] = [4, 5]
    a[:] = []

3.2 走向编程的第一步

 

3.2.1 多重赋值

3.2.2 print

print 会在多个参数间加空格可以传入 end 参数指定结尾替换换行的字符串

4 其他流程控制工具

 

4.1 if 语句

  • 输入 aa = input(“input: ”)
  • if if elif else

4.2 for 语句

  • Python 中的 for 是对任意序列进行迭代
  • 如果在循环内需要修改序列中的值,推荐先拷贝一份副本

    words = ['aaa', 'bbb', 'ccccccc']
    for w in words[:]:
    if len(w) > 5:
    words.insert(0, w)

4.3 range() 函数

  • range(0, 10, 3) 0, 3, 6, 9
  • 以序列的索引迭代

    a = ['a', 'b', 'c']
    for i in range(len(a)):
    print(i, a[i]) for i, v in enumerate(a):
    print(i, v)
  • range() 返回的不是列表,是一个可迭代对象

4.4 break 和 continue 语句,以及循环中的 else 子句

  • else 子句 else 子句会在未执行 break,循环结束时执行

4.5 pass 语句

  • pass 通常用于创建最小的类 class MyEmptyClass: pass
  • pass 也用于写代码时作为函数或条件子句体的占位符,保持在更抽象的层次上思考

4.6 定义函数

  • 文档字符串
  • 全局变量和外部函数的变量可以被引用,但是不能在函数内部直接赋值
  • 函数的重命名机制
  • 没有 return, 函数会返回 None
  • 列表方法 append() 比 + 效率高

4.7 函数定义的更多形式

 

4.7.1 参数默认值

  • in 测试一个序列是否包含某个值
  • 默认值时在定义过程中在函数定义处计算的,而不是调用时
  • 默认值只执行一次,如果是可变对象,比如列表,就可以在后续调用之间共享默认值类似于 c 中的静态变量

    def f(a, L=[]):
    print(a)
    L.append(a)
    print(L) f(1)
    f(2)
    f(3)
    f(4)

4.7.2 关键字参数

  • 关键字参数必须在位置参数后
  • 形参 * **

4.7.3 任意的参数列表

  • 任意的参数列表 *args 一般位于形式参数列表的末尾,只有关键字参数能出现在其后

4.7.4 解包参数列表

  • 使用* 从列表或元组中解包参数 args = [3, 6] range(*args)
  • 使用** 从字典解包参数

4.7.5 Lambda 表达式

  • 闭包

    def make_incrementor(n):
    return lambda x: x + n f = make_incrementor(33)
    f(0)
  • 传递一个函数作为参数

    pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
    pairs.sort(key=lambda pair: pair[1])

4.7.6 文档字符串

  • 一些约定第一行简要描述对像的目的,大写字母开头,句点结尾第二行空白,后面几行是一个或多个段落,描述调用约定,副作用等

4.7.7 函数标注

  • 标注不会对代码有实质影响,只是给人看

    def f(ham: str, eggs: str = "eggs") -> str:
    print(f.__annotations__)
    return ham + ' and ' + eggs

4.8 小插曲: 编码风格

  • 使用 4 空格缩进,而不是制表符
  • 一行不超过 79 个字符(可以在较大显示器并排放置多个代码文件)
  • 使用空行分割函数和类,以及函数内的较大的代码块
  • 尽量把注释放到单独的一行
  • 使用文档字符串
  • 在运算符前后和逗号后使用空格
  • 函数和类命名应使用一致规则类 UpperCamelCase 函数 lowercasewithunderscores
  • 一般不另外设置代码的编码
  • 不要在标识符中使用非 ASCII 字符

5 数据结构

 

5.1 列表的更多特性

  • 列表对象方法的清单 list.append(x) list.extend(iterable) list.insert(i, x) list.remove(x) list.pop([i]) list.clear() list.index(x[, start[, end]]) list.count(x) list.sort(key=None, reverse=False) list.reverse() list.copy()

5.1.1 列表作为栈使用

  • list.append(x) list.pop()

5.1.2 列表作为队列使用

  • 在列表开头插入或弹出元素很慢

    from collections import deque
    queue = deque(['aaa', 'bbb', 'ccc'])
    queue.append('ddd')
    queue.popleft()

5.1.3 列表推导式

  • for 循环后,循环变量还存在
  • 列表推导式中,for 和 if 顺序和展开形式的顺序是一致的
  • 如果表达式是一个元组,需要加括号

5.1.4 嵌套的列表推导式

a = [1, 2, 3]
b = [4, 5, 6]
print(list(zip(a, b)))

5.2 del 语句

  • del 可以删除指定索引的元素
  • del 可以删除切片指定的范围
  • del a[:]
  • del a

5.3 元组和序列

  • 元组通常包含不同种类的元素,列表的元素一般是同种类型
  • 空元组可以直接被一对圆括号创建
  • 元组输入时圆括号可有可无

5.4 集合

  • set()
  • 集合操作 a | b a - b a & b a ^ b
  • 集合推导式 a = {x for x in ’abcdedd’ if x not in ’abc’}

5.5 字典

  • 只要不包含不可变对象,都可以作为键

5.6 循环的技巧

  • 字典循环时,可以用 items() 方法把关键字和值同时取出
  • 序列循环时,可以用 enumerate()函数将索引和值同时取出
  • 要同时在多个序列中循环时,可以用 zip()函数
  • 如果要逆向一个序列,可以使用 reversed()函数
  • sorted()函数可以返回一个新的排好序的序列
  • 在循环时想修改列表内容,最好创建新列表

5.7 深入条件控制

  • in 和 not in
  • is 和 is not 比较是不是同一个对象
  • 比较操作可以传递

5.8 比较序列和其他类型

  • 序列也可以比较

6 模块

  • 如果经常使用某个导入的函数,可以赋值给一个局部变量重命名

6.1 更多有关模块的信息

  • 几种导入方式

    from fibo import fib, fib2
    from fibo import *
    import fibo as fib
    from fibo import fib as fibonacci
  • 每个模块在每个解释器会话中只被导入一次,如果更改了模块,要重新启动解释器或 import importlib importlib.reload(module)

6.1.1 以脚本的方式执行模块

  • 如果直接执行脚本,_name__ 被赋值为_main__

6.1.2 模块搜索路径

  • 搜索路径
    1. 内置模块
    2. sys.path 给出的目录列表
      1. 包含输入脚本的目录
      2. PYTHONPATH
      3. 取决于安装的默认设置

6.1.3 “编译过的”Python 文件

  • python3 会把 pyc 统一放在_pycache_ python2 是放在源文件同目录下
  • pyc 和 py 文件运行速度是一样的,只是 pyc 的载入速度更快

6.2 标准模块

  • sys.ps1 sys.ps2 用于定义交互模式下的提示符

6.3 dir() 函数

  • dir 用于查找模块定义的名称
  • 如果没有参数,dir 会列出当前定义的名称
  • dir 不会列出内置函数和变量,他们定义在标准模块 builtins

6.4 包

  • 包是一种通过用“带点号的模块名”来构造 Python 模块命名空间的方法
  • _init_.py 中可以执行包的初始化代码或设置_all__ 变量
  • 一些导入方式
    1. 导入模块 import a.b.c 使用时要使用全名 from a.b import c 可以直接用 c from a.b.c import d 可以直接用 d

6.4.1 从包中导入*

  • 导入一个包时会参考它 init.py 内_all__ 列表的内容

6.4.2 子包参考

  • 相对导入 from . improt echo from .. import formats from ..filters import equalizer
  • 相对导入时基于当前模块的名称进行导入的,所以主模块必须用绝对导入

6.4.3 多个目录中的包

7 输入输出

 

7.1 更漂亮的输出格式

  • 一些格式化输出方式 aa = ’a test’ b = f’hehe {aa}’ ’{gg}’.format(aa)
  • str() 返回人类可读的值的表示
  • repr() 生成解释器可读的表示

7.1.1 格式化字符串文字

  • 一些示例 print(f’value {math.pi:.3f}.’) print(f’{name:10} {num:10d}’) print(f’{animal!r}’) # !a ascii() !s str() !r repr()

7.1.2 字符串的 format() 方法

7.1.3 手动格式化字符串

  • rjust() ljust() center()

7.1.4 旧的字符串格式化方法

  • %

7.2 读写文件

  • 最好使用 with

7.2.1 文件对象的方法

  • 常用方法列表 f.read() f.readline() f.write() f.tell() f.seek(5) f.seek(-3,2) # 0 start 1 current 2 end
  • 遍历行 for line in f: pass

7.2.2 使用 json 保存结构化数据

  • 常用方法 jons.dumps([1, ’a’, 2]) json.dump(x, f) x = json.load(f)

8 错误和异常

 

8.1 语法错误

8.2 异常

8.3 处理异常

  • else 子句必须放在 except 后

8.4 抛出异常

  • 在 except 处理时可以 raise 抛出异常

8.5 用户自定义异常

  • 自定义异常一般只是提供一些属性

8.6 定义清理操作

  • finally 子句

8.7 预定义的清理操作

  • with 语句

9 类

 

9.1 名称和对象

  • Python 中,多个变量可以绑定到一个对象,对于可变对象,表现得类似于指针

9.2 Python 作用域和命名空间

 

9.2.1 作用域和命名空间示例

  • 关于 nonlocal global 的用法

        def do_local():
    spam = "local spam" def do_nonlocal():
    nonlocal spam
    spam = "nonlocal spam" def do_global():
    global spam
    spam = "global spam" spam = "test spam"
    do_local()
    print("After local assignment:", spam)
    do_nonlocal()
    print("After nonlocal assignment:", spam)
    do_global()
    print("After global assignment:", spam) scope_test()
    print("In global scope:", spam)

输出结果 After local assignment: test spam After nonlocal assignment: nonlocal spam After global assignment: nonlocal spam In global scope: global spam

9.3 初探类

 

9.3.1 类定义语法

9.3.2 类对象

  • 类对象支持两种操作: 属性引用和实例化
  • _doc__ 文档字符串

9.3.3 实例对象

  • 实例对象的唯一操作是属性引用
  • 两种属性名称: 数据属性和方法
  • 数据属性不需要声明,在第一次赋值时产生

9.3.4 方法对象

  • 区分方法对象和函数对象

    class TestClass:
    def kk(self):
    print('aaa') bb = TestClass()
    bb.kk()
    TestClass.kk(bb)

9.3.5 类和实例变量

9.4 补充说明

9.5 继承

  • isinstance(obj, int)
  • issubclass(bool, int)

9.5.1 多重继承

  • 搜索的顺序是深度优先,从左到右

9.6 私有变量

  • 通过约定,下划线开头的名称

9.7 杂项说明

  • 定义空类,简单实现将命名数据捆绑在一起

    class Employee:
    pass johb = Employee()
    john.name = "peter"
    john.dept = "computer lab"
  • 实例方法对象具有的属性 m._self__ 带有 m 方法的实例对象 m._func__ 该方法对应的函数对象

9.8 迭代器

  • for 的机制
    1. for 会用 iter() 函数调用容器内的_iter_()方法
    2. 此方法会返回一个定义了_next_()方法的对象
    3. 调用 next() 函数,会调用上一步返回对象的_next_()方法
    4. 当元素用尽时,_next_()会引发 StopIteration 异常
  • 给自己的类添加迭代器行为
    1. 定义_iter__ 方法,返回 self
    2. 定义_next__ 方法,返回一个改变引用所指的对象,同时设置条件,遍历完 raise StopIteration

      class Reverse:
      def __init__(self, data):
      self.data = data
      self.index = len(data) def __iter__(self):
      return self
      def __next__(self):
      if self.index == 0:
      raise StopIteration
      self.index = self.index - 1
      return self.data[self.index]

9.9 生成器

  • 写法类似标准函数,但是返回不用 return,用 yield
  • 生成器会自动创建_iter_()和_next_(),生成器终结时会自动引发 StopIteration

9.10 生成器表达式

  • 生成器表达式被设计用于生成器将立即被外层函数所使用的情况 sum(i*i for i in range(10))

10 标准库简介

 

10.1 操作系统接口

  • import os os.getcwd() os.chdir() os.system
  • 对于日常文件和目录管理任务,shutil 模块提供了更易于使用的更高级模块 shutil.copyfile() shutil.move()

10.2 文件通配符

  • import glob 提供了在一个目录中使用通配符搜索文件列表的函数 glob.glob(’*.py’)

10.3 命令行参数

  • import sys print(sys.argv)
  • argparse

    import argparse
    from getpass import getuser
    parser = argparse.ArgumentParser(description='An argparse example.')
    parser.add_argument('name', nargs='?', default=getuser(), help='The name of someone to greet.')
    parser.add_argument('--verbose', '-v', action='count')
    args = parser.parse_args()
    greeting = ["Hi", "Hello", "Greetings! its very nice to meet you"][args.verbose % 3]
    print(f'{greeting}, {args.name}')
    if not args.verbose:
    print('Try running this again with multiple "-v" flags!')

10.4 错误输出重定向和程序终止

  • sys.std sys.stdin sys.stdout sys.stderr.write(’wrong’)
  • 终止脚本 sys.exit()

10.5 字符串模式匹配

  • import re re.findall(r’\bf[a-z]*’, ’which foot or hand fell fastest’) re.sub(r’(\b[a-z]+) \1’, r’\1’, ’cat in the the hat’) ’cat in the hat’
  • 当只需要简单的功能时,首选字符串方法

10.6 数学

  • math 提供了对浮点数的低层 C 库函数的访问
  • import math math.cos(math.pi / 4) math.log(1024, 2)
  • random random.choice([’a’, ’b’, ’c’]) random.sample(range(100), 10) # 选 10 个样本出来 random.random() # 0 到 1 的随机数 random.randrange(5) # 从 range(5) 选
  • import statistics statistics.mean() # 平均值 statistics.median() # 中位数 statistics.variance() # 方差

10.7 互联网访问

  • urllib.request

    from urllib.request import urlopen
    
    with urlopen('http://www.baidu.com') as response:
    for line in response:
    line = line.decode('utf-8')
    if 'EST' in line or 'EDT' in line:
    print(line)
  • smtplib

    import smtplib
    server = smtplib.SMTP('localhost')
    server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
    """To: jcaesar@example.org
    From: soothsayer@example.org Beware the Ides of March.
    """)
    server.quit()

10.8 日期和时间

  • datetime

    # dates are easily constructed and formatted
    from datetime import date
    now = date.today()
    now
    # datetime.date(2003, 12, 2)
    now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
    # '12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.' # dates support calendar arithmetic
    birthday = date(1964, 7, 31)
    age = now - birthday
    age.days
    #

10.9 数据压缩

  • zlib

    import zlib
    s = b'witch which has which witches wrist watch'
    len(s) t = zlib.compress(s)
    len(t) zlib.decompress(t) zlib.crc32(s)

10.10 性能测量

  • timeit 快速测试小段代码

>>> from timeit import Timer >>> Timer(’t=a; a=b; b=t’, ’a=1; b=2’).timeit() 0.57535828626024577 >>> Timer(’a,b = b,a’, ’a=1; b=2’).timeit() 0.54962537085770791

  • Profile
import cProfile, pstats, io
from pstats import SortKey
import hashlib
import time pr = cProfile.Profile()
pr.enable()
data = "你好"
for i in range(10000): m = hashlib.md5(data.encode("gb2312")) time.sleep(2)
pr.disable()
s = io.StringIO()
sortby = SortKey.CUMULATIVE
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.print_stats()
print(s.getvalue())

10.11 质量控制

  • doctests 可以验证文档字符串中嵌入的测试

    def average(values):
    """Computes the arithmetic mean of a list of numbers. >>> print(average([20, 30, 70]))
    40.0
    """
    return sum(values) / len(values) import doctest
    doctest.testmod() # automatically validate the embedded tests
  • unittest

    import unittest
    
    class TestStatisticalFunctions(unittest.TestCase):
    
        def test_average(self):
    self.assertEqual(average([20, 30, 70]), 40.0)
    self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
    with self.assertRaises(ZeroDivisionError):
    average([])
    with self.assertRaises(TypeError):
    average(20, 30, 70) unittest.main() # Calling from the command line invokes all tests

10.12 自带电池

  • xmlrpc.client xmlrpc.server
  • email
  • json
  • csv
  • xml.etree.ElementTree xml.dom xml.sax
  • sqlite3
  • gettext locale codecs

11 标准库简介 – 第二部分

  • 本部分介绍的是专业编程需要的更高级的模块,很少用在小脚本中

11.1 格式化输出

  • reprlib 用于缩略显示大型或深层嵌套的容器对象 >>> reprlib.repr(set(’supercalifragilisticexpialidocious’))

“{‘a’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, …}”

  • pprint 美化输出版 print
  • textwrap 格式化文本段落,适应给定的屏幕宽度 print(textwrap.fill(doc, width=40))

11.2 模板

  • from string import Template

>>> t = Template(’${village}folk send $$10 to $cause.’) >>> t.substitute(village=’Nottingham’, cause=’the ditch fund’) ’Nottinghamfolk send $10 to the ditch fund.’

11.3 使用二进制数据记录格式

  • struct 模块的 pack() unpack()

11.4 多线程

  • threading

11.5 日志记录

  • logging

11.6 弱引用

  • weakref 可以不必创建引用就能跟踪对象

11.7 用于操作列表的工具

  • from array import array
  • from collections import deque
  • import bitset
  • from heapq import heapify, heappop heappush

11.8 十进制浮点运算

  • from decimal import * 可以提供足够的精度,也能满足浮点数的相等性

12 虚拟环境和包

 

12.1 概述

12.2 创建虚拟环境

  • venv

12.3 使用 pip 管理包

  • pip 常用命令 pip search xxx pip install novas pip install requests==2.6.0 pip install –upgrade requests pip show requests pip list pip freeze > requirements.txt pip install -r requirements.txt

13 接下来?

14 交互式编辑和编辑历史

 

14.1 Tab 补全和编辑历史

  • python3 解释器已经有 tab 补全了
  • 默认配置,编辑历史会被保存在 home 目录 .pythonhistory

14.2 默认交互式解释器的替代品

  • ipython

15 浮点算术

16 附录

Author: cat

Created: 2019-11-01 Fri 17:48

python 3.7.5 官方tutorial 学习笔记的更多相关文章

  1. [Python ]小波变化库——Pywalvets 学习笔记

    [Python ]小波变化库——Pywalvets 学习笔记 2017年03月20日 14:04:35 SNII_629 阅读数:24776 标签: python库pywavelets小波变换 更多 ...

  2. Python的dict字典结构操作方法学习笔记

    Python的dict字典结构操作方法学习笔记 这篇文章主要介绍了Python的dict字典结构操作方法学习笔记本,字典的操作是Python入门学习中的基础知识,需要的朋友可以参考下 一.字典的基本方 ...

  3. Django 1.7 Tutorial 学习笔记

    官方教程在这里 : Here 写在前面的废话:)) 以前学习新东西,第一想到的是找本入门教程,按照书上做一遍.现在看了各种网上的入门教程后,我觉得还是看官方Tutorial靠谱.书的弊端一说一大推 本 ...

  4. Metasploit和python两种安全工具的学习笔记

    Metasploit是个好东西 主要参考了<Metasploit渗透测试魔鬼训练营>这本书. 一.先用自己的靶机感受一下该工具的强大 linux靶机的ip如图 按照书上写的配置,如图 然后 ...

  5. Note | PyTorch官方教程学习笔记

    目录 1. 快速入门PYTORCH 1.1. 什么是PyTorch 1.1.1. 基础概念 1.1.2. 与NumPy之间的桥梁 1.2. Autograd: Automatic Differenti ...

  6. SQL Expression Language Tutorial 学习笔记一

    http://docs.sqlalchemy.org/en/latest/core/tutorial.html Google 翻译了一下 SQLAlchemy Expression Language, ...

  7. python+selenium之悠悠博客学习笔记

    1 Python之自动化测试框架selenium学习 offical website 悠悠之selenium浅谈·博客园 悠悠软件测试系列 1.1 基础环境准备 1.1.1 python包下载工具的安 ...

  8. 深度学习 Deep Learning UFLDL 最新 Tutorial 学习笔记 1:Linear Regression

    1 前言 Andrew Ng的UFLDL在2014年9月底更新了. 对于開始研究Deep Learning的童鞋们来说这真的是极大的好消息! 新的Tutorial相比旧的Tutorial添加了Conv ...

  9. How to use the Custom Material node and create Metaballs 官方视频学习笔记

    这个视频Youtube没有字幕着实蛋疼,本人英语很渣,几乎听不懂,里面有很多文档没讲的重要信息(文档讲的东西太少了). 不过学习过后你可以解锁好几个姿势.这个视频主要是教你做DistanceField ...

随机推荐

  1. JVM(四)类加载机制

    1.静态绑定和动态绑定 静态绑定:即前期绑定,在程序执行前方法已经被绑定,此时由编译器或者其他连接程序实现,针对Java,可以理解为编译期的绑定,java中只有final.static.private ...

  2. Windows10+YOLOv3实现检测自己的数据集(1)——制作自己的数据集

    本文将从以下三个方面介绍如何制作自己的数据集 数据标注 数据扩增 将数据转化为COCO的json格式 参考资料 一.数据标注 在深度学习的目标检测任务中,首先要使用训练集进行模型训练.训练的数据集好坏 ...

  3. 为了给女朋友买件心怡内衣,我用Python爬虫了天猫内衣售卖数据

    真爱,请置顶或星标 大家好,希望各位能怀着正直.严谨.专业的心态观看这篇文章.ヾ(๑╹◡╹)ノ" 接下来我们尝试用 Python 抓取天猫内衣销售数据,并分析得到中国女性普遍的罩杯数据.最受 ...

  4. asp.net开源流程引擎API开发调用接口大全-工作流引擎设计

    关键词: 工作流引擎 BPM系统 接口调用 工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流 一.程序调用开发接口二.   接口说明 所谓的驰骋工作流引擎的接口,在B ...

  5. 主动降噪(Active Noise Control)

    智能耳机 人机交互 智能声学终端 智能耳机 智能音箱 智能听力器 喇叭单体 动圈喇叭 新材料 DLC 石墨烯 陶瓷单位 吸音材料 智能芯片 阵列式麦克风 声纹传感器 演算法 降噪算法 智能听力保护 A ...

  6. Vue中插槽指令

    08.29自我总结 Vue中插槽指令 意义 就是在组件里留着差值方便后续组件内容新增 而且由于插件是写在父级中数据可以直接父级中传输而不需要传子再传父有些情况会减少写代码量 示例 <div id ...

  7. django根据已有数据库表生成model类

    django根据已有数据库表生成model类 创建一个Django项目 django-admin startproject 'xxxx' 修改setting文件,在setting里面设置你要连接的数据 ...

  8. App自动化环境搭建

    1.安装Appium-desktop工具 下载地址:https://github.com/appium/appium-desktop/releases/tag/v1.8.2 2.安装Android环境 ...

  9. 零基础转行web前端,要学习多久?需要掌握些什么?

    web前端开发技术人才越来越吃香,而且web前端领域划分越来越细,对技术的需求越来越高,想学习web前端的人也是越来越多.那么,如何学习web前端知识?从哪开始?转型成为web前端工程师需要学些什么? ...

  10. MySQL生僻函数

    0X01 字符串函数 STRCMP STRCMP(expr1,expr2) 若所有的字符串均相同,则返回STRCMP(),若根据当前分类次序,第一个参数小于第二个,则返回  -1,其它情况返回 1 . ...