笔记
第0关 print()函数与变量
第1关 数据类型与转换
第2关 条件判断与条件嵌套
- 条件判断的三种形式:
1 | 单向判断:if |
2 | 双向判判断:if...else |
3 | 多向判判断:if...elif ...else |
4 | |
5 | #条件 |
6 | if xxxx: |
7 | #做点什么 |
8 | print(xxxx) |
9 | 命令逻辑:如果...就... |
10 | 命令格式:if条件后面跟英文冒号,回车后自动缩进 |
Python官网:
Python官方文档:
###简介
pipenv
是Python官方推荐的包管理工具。可以说,它集成了virtualenv
, pip
和pyenv
三者的功能。其目的旨在集合了所有的包管理工具的长处,如: npm
, yarn
, composer
等的优点。
它能够自动为项目创建和管理虚拟环境,从Pipfile
文件添加或删除安装的包,同时生成Pipfile.lock
来锁定安装包的版本和依赖信息,避免构建错误。
pipenv
主要解决了如下问题:
pip
和virtualenv
, 现在它们合并在一起了requirements.txt
, 使用Pipfile
和Pipfile.lock
来代替python2
和python3
)pyenv
的条件下,可以自动安装需要的Python版本1、pyenv是什么?
pyenv是Python版本管理工具,利用它我们可以在同一台电脑上安装多个版本的Python,这个过程非常简单。
2、 pipenv是什么?
pipenv是Python官方推荐的包管理工具,用来管理安装包的。类似于npm包。
3、利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境。
1.1、安装或升级pyenv
首先安装pyenv,如果你是Mac电脑,那么推荐使用Homebrew来安装。
1 | brew update |
2 | brew install pyenv |
1.2、用pyenv安装Python
安装完pyenv,安装Python就简单了。我电脑上系统自带的是Python2.7.10,我准备再安装一个Python2.7.14和Python3.6.4,以后开发时候就用自己安装的Python2.7.14或者Python3.6.4了。
1 | pyenv install 3.6.4 2.7.24 |
2 | pyenv rehash |
执行命令pyenv versions,如果输出结果如下,那么说明我们已经安装好了Python2.7.14和Python3.6.4:
1 | pyenv versions |
2 | system |
3 | * 2.7.14 |
4 | * 3.6.4 |
现在我们就可使用Python2.7.14和Python3.6.4了。执行这个下面python2、python3、python指令可以进入到不同版本的Python环境。
pyenv global属于全局切换,pyenv local属于局部切换,局部切换只在所在切换时的目录中生效。可以通过如下命令来切换版本:
1 | $: pyenv global 3.6.4 |
2 | $: pyenv versions |
3 | system |
4 | 2.7.14 |
5 | * 3.6.4 (set by /Users/chunming.liu/.pyenv/version) |
6 | pyenv local 2.7.14 |
重要事情说三遍:
不过有了pipenv,我们不用手动切换Python版本了,也就是安装完了pyenv之后不用再去安装具体的Python版本了。
1 | 注意: |
2 | add --enable-shared for pyenv python installations |
3 | https://github.com/pyenv/pyenv/wiki#how-to-build-cpython-with---enable-shared |
2.1、安装pipenv
如果你是Mac电脑,那么推荐使用Homebrew来安装。
1 | brew install pipenv |
执行pipenv,可以查看pipenv的帮助信息。
2.2、为项目建立虚拟环境
默认地,虚拟环境会创建在~/.local/share/virtualenvs目录里面。
如果我们希望在每个项目的根目录下保存虚拟环境目录(.venv),需要在 .bashrc 或 .bash_profile 中配置如下:
1 | export PIPENV_VENV_IN_PROJECT=1 |
要想使配置生效,执行下source ~/.bashrc或者source ~/.bash_profile。
接下来我们为项目创建虚拟环境。
1 | mkdir pipenv_demo |
2 | cd pipenv_demo |
3 | |
4 | pipenv --three # 初始化一个python3虚拟环境 |
5 | pipenv --two # 初始化一个python3虚拟环境 |
创建完虚拟环境之后,在pipenv_demo目录下将会看到一个.venv的目录,这个目录就是pipenv_demo项目的虚拟环境。
使用具体的python版本创建虚拟环境,可以执行:
1 | pipenv --python 2.7.14 |
2.3、为项目安装第三方依赖包
为项目安装自己的依赖包到虚拟环境中,使每个项目拥有相互独立的第三方包,是非常不错的Python的开发实践。安装依赖包到虚拟环境中:
1 | pipenv install flask |
2 | pipenv install pytest --dev # 用于区分需要部署到线上的开发包、只需要在测试环境中执行的包 |
执行完上面的命令后,检查一下是否安装成功:
1 | $ pipenv graph |
2 | Flask==0.12.2 |
3 | - click [required: >=2.0, installed: 6.7] |
4 | - itsdangerous [required: >=0.21, installed: 0.24] |
5 | - Jinja2 [required: >=2.4, installed: 2.10] |
6 | - MarkupSafe [required: >=0.23, installed: 1.0] |
7 | - Werkzeug [required: >=0.7, installed: 0.14.1] |
8 | pytest==3.4.2 |
9 | - attrs [required: >=17.2.0, installed: 17.4.0] |
10 | - pluggy [required: >=0.5,<0.7, installed: 0.6.0] |
11 | - py [required: >=1.5.0, installed: 1.5.2] |
12 | - setuptools [required: Any, installed: 38.6.0] |
13 | - six [required: >=1.10.0, installed: 1.11.0] |
2.4 更新 pypi源来提高依赖库安装的速度
在使用pipenv的时候,常常会在安装的时候,一直卡在了 Locking 这里,通过加上 -v 参数,可以看到安装过程中的步骤信息,卡在了下载那里,这时应该可以意识到是因为网络的原因,pipenv创建的 Pipfile 中默认的pypi源是python官方的 https://pypi.python.org/simple。我们国内用户访问下载的时候会很慢。
所以,我一般会在创建好Pipfile以后,修改到文件中 source 块下的 url 字段,设置为国内的 pypi 源就好了,我推荐的是清华的pypi源或者阿里源,具体设置如下:
1 | [[source]] |
2 | url = "https://pypi.tuna.tsinghua.edu.cn/simple" |
3 | verify_ssl = true |
4 | name = "pypi" |
3、使用虚拟环境进行开发
虚拟环境创建好了之后,就可以在里面进行开发了。
如果在命令行下开发,则在项目目录下执行pipenv shell,就进入到了虚拟环境中,在这个环境中,就已经包含安装过的所有第三方依赖包了,接下来就可以利用这些第三方包进行开发工作了。
如果是用Pycharm进行开发,就更简单了,直接用Pycharm打开项目目录就好了,打开后可以从Pycharm中的左侧导航栏里面看到External Libraries里面显示的是虚拟环境中的Python解释器。
4、删除安装的第三方包
如果是要删除虚拟环境中的第三方包,执行
1 | pipenv uninstall flask |
5、安装项目所有的依赖
用git管理项目时候,要把Pipfile和Pipfile.lock加入版本跟踪。这样clone了这个项目的同学,只需要执行
1 | pipenv install |
就可以安装所有的Pipfile中 [packages]部分的包了,并且自动为项目在自己电脑上创建了虚拟环境。
如果是想要安装[dev-packages]部分的包,需要执行:
1 | pipenv install -d |
上面的方法都是安装Pipfile中列出来的第三方包的最新版本,如果是想安装Pipfile.lock中固定版本的第三方依赖包,需要执行:
1 | pipenv install --ignore-pipfile |
如果你的项目之前使用requirements.txt来管理依赖的,那么使用pipenv安装所有依赖可以采用类似pip的方法:
1 | pipenv install -r path/to/requirements.txt |
6、团队实践建议
建议团队内开发人员,在自己电脑上都安装pyenv和pipenv。Pipfile和Pipfile.lock加入版本跟踪,.venv不要加入版本管理。为自己的每一个项目建立独立的虚拟环境。
7、扩展命令(了解下就好)
1 | pipenv --py |
1 | pipenv --venv |
pip freeze
1 | pipenv run pip freeze |
1 | pipenv install pytest --dev |
1 | pipenv sync |
参考链接:https://blog.csdn.net/liuchunming033/article/details/79582617
https://blog.windrunner.me/python/pip.html#pip-%E4%B8%8E-pipfile
less版本:
1 | "less": "2.7.2", less:3.0有bug |
要编译的文件:
1 | // theme.less |
2 | |
3 | // 由于antd内部使用了utf8编码的文字符号而不是使用\u****的Unicode码点表示 |
4 | // 在cdn样式文件返回头里没有明确指明utf-8时,可能存在文字符号乱码的可能 |
5 | // 编译生成过程中通过css-loader也会自动转换,而本文场景是直接编译 |
6 | // 所以,为了安全起见,最好指定编码格式 |
7 | @charset "utf-8"; |
8 | |
9 | @import "../node_modules/antd/dist/antd.less"; |
10 | |
11 | // 覆盖变量定义 |
12 | // 所有变量详见 https://github.com/ant-design/ant-design/blob/master/components/style/themes/default.less |
13 | |
14 | @primary-color: #F15B41; |
编译命令:
1 | n// theme.less |
2 | |
3 | // 由于antd内部使用了utf8编码的文字符号而不是使用\u****的Unicode码点表示 |
4 | // 在cdn样式文件返回头里没有明确指明utf-8时,可能存在文字符号乱码的可能 |
5 | // 编译生成过程中通过css-loader也会自动转换,而本文场景是直接编译 |
6 | // 所以,为了安全起见,最好指定编码格式 |
7 | @charset "utf-8"; |
8 | |
9 | @import "../node_modules/antd/dist/antd.less"; |
10 | |
11 | // 覆盖变量定义 |
12 | // 所有变量详见 https://github.com/ant-design/ant-design/blob/master/components/style/themes/default.less |
13 | |
14 | @primary-color: #F15B41; |
参考:
使用homebrew安装
1 | brew update |
2 | brew install mongodb |
在当前目录下建立data/db文件夹,并设置权限可读可写
####启动
/usr/local/Cellar/mongodb/3.4.6/bin
配置path路径
1 | 如果你不想每次启动mongodb都要切换到/usr/local/Cellar/mongodb/3.4.6/bin目录下,你可以将它添加到环境变量,操作如下: |
2 | echo 'export PATH=/usr/local/Cellar/mongodb/3.4.6/bin:$PATH'>>~/.bash_profile |
3 | 添加完成后为使环境变量生效,可重启shell终端,或输入命令 |
4 | |
5 | source .bash_profile。 |
6 | 查看环境变量是否添加成功: |
7 | echo $PATH |
参考文档:
1 | https://www.jianshu.com/p/c53a48cdba7f |
###基本使用
1 | ./mongo 或 mongo |
展示数据库:show dbs
切换数据库:use 数据库名 例如:use user
展示表:show collections
展示整张表的信息:db.表名.find() 例如:db.user.find()
更新指定记录的指定值:使用$set,否则所有该字段都会被更新。
db.user.update({“name”:”xxx”},{$set:{“name”:”yyy”}})
删除记录:
db.user.remove({“name”:”xxx”})
插入数据:
db.users.insert({“name”:”James”}})
模块打包工具
1 | ES Module 模块引入方式 |
2 | CommonJS 模块引入方式(node的引入规范) |
3 | CMD |
4 | ADM |
5 | !!!千万不能全局安装webpack, 全局安装了某个版本的,如4.0,那其他用3.0的版本的就没法用了。 |
快速初始化npm项目
1 | npm init -yes |
查看npm包的信息
1 | npm info '安装包的名字' 例如: npm info webpack |
npx用来查看当前项目的node_module安装包的的命令
1 | npx webpack -v |
2 | |
3 | 安装指定版本的npm包 |
4 | webpack-cli@3.3.0 |
5 | |
6 | webpack打包默认是使用webpack.config.js文件; |
7 | 如果需要指定其他的问配置文件:npx webpack --config webapckconfig.js(配置文件名) |
1 | npm install hexo -g #安装 |
2 | npm update hexo -g #升级 |
3 | hexo init #初始化 |
hexo n "我的博客"
== hexo new "我的博客"
#新建文章hexo p
== hexo publish
hexo g
== hexo generate
#生成hexo s
== hexo server
#启动服务预览hexo d
== hexo deploy
#部署
hexo server
#Hexo 会监视文件变动并自动更新,您无须重启服务器。hexo server -s
#静态模式hexo server -p 5000
#更改端口hexo server -i 192.168.1.1
#自定义 IP
hexo clean
#清除缓存 网页正常情况下可以忽略此条命令hexo g
#生成静态网页hexo d
#开始部署
1 | ### thinkphp环境搭建 |
2 | ``` bash |
3 | 1. 安装XAMPP |
4 | 2. 启动,检查端口是否被占用,被占用的话结束其他应用 |
5 | netstat -ano //Windows环境下查看端口 |
6 | 3. /mysql/bin/目录下 mysql -uroot -p //查看mysql是否安装成功 php目录,php -v 查看是PHP是否成功。 |
7 | 4. [ 下载应用项目](https://github.com/top-think/think.git) |
8 | 5. [ 下载核心类库](https://github.com/top-think/framework.git) |
9 | 6. 上面两个文件解压,拷贝到XAMPP根目录下的htdocs,应用项目重命名zerg,核心类重命名thinkphp,把thinkphp剪切到zerg. |
10 | 7. 浏览器http://localhost/zerg/public/ 显示成功界面,环境搭建成功。 |
11 | |
12 | 安装Xdebug,打开php.ini配置文件,在最下面加入最后一行。 |
13 | [Xdebug] |
14 | zend_extension = C:\server\xampp\php\php_xdebug-2.5.4-5.6-vc11.dll |
15 | xdebug.remote_enable=1 |
16 | xdebug.remote_port=9000 |
17 | xdebug.remote_host= localhost |
18 | xdebug.idekey = PHPSTORM |
19 | xdebug.profiler_enable=1 |
20 | xdebug.profiler_output_dir=" C:\server\xampp\php\xdebug_log" |
1 | 配置虚拟主机 |
2 | C:\server\xampp\apache\conf\extra |
3 | <VirtualHost *:80> |
4 | DocumentRoot "C:\server\xampp\htdocs" |
5 | ServerName localhost |
6 | </VirtualHost> |
7 | |
8 | <VirtualHost *:80> |
9 | DocumentRoot "C:\server\xampp\htdocs\zerg\public" |
10 | ServerName z.com |
11 | </VirtualHost> |
12 | 更改host文件 |
13 | C:\Windows\System32\drivers\etc |
14 | # localhost name resolution is handled within DNS itself. |
15 | # 127.0.0.1 localhost |
16 | 127.0.0.1 z.com |
17 | ###路由模块 |
18 | |
19 | //Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)'); |
20 | //Route::rule('hello','sample/Test/hello','GET',['https'=>true ]); |
21 | //Route::get('hello','sample/Test/hello'); |
22 | 1. 特别注意,方法一旦注册路由,原来的path路径方法自动失效。!!!!!!!!!!!! |
23 | |
24 | ### 传递参数 |
25 | 路由里面传递参数:使用“:参数名称” ?name="zhangshan"&age=18 |
26 | Route::post('hello/:id','sample/Test/hello'); |
27 | ### 获取参数 |
28 | 1. 方式一: |
29 | public function hello($id, $name,$age){ |
30 | echo $id; |
31 | echo '|'; |
32 | echo $name; |
33 | echo '|'; |
34 | echo $age; |
35 | return "hello qiniujljljlj"; |
36 | } |
37 | 2. 方式二: |
38 | 首先,导入包; |
39 | use think\Request; |
40 | param跟请求方式无关,都能获取到 |
41 | public function hello(){ |
42 | $id = Request::instance()->param('id'); |
43 | $name = Request::instance()->param('name'); |
44 | $age = Request::instance()->param('age'); |
45 | echo $id; |
46 | echo '|'; |
47 | echo $name; |
48 | echo '|'; |
49 | echo $age; |
50 | |
51 | } |
52 | |
53 | 获取所有参数一: |
54 | public function hello(){ |
55 | $all = Request::instance()->param(); |
56 | //$all = Request::instance()->get(); 获取get传参数 |
57 | //$all = Request::instance()->post(); 获取post传参 |
58 | //$all = Request::instance()->route(); 获取路由传参 |
59 | var_dump($all); |
60 | } |
61 | |
62 | 获取所有参数二(通过input助手函数) |
63 | public function hello(){ |
64 | $all = input('param.'); |
65 | var_dump($all); |
66 | |
67 | } |
68 | 获取所有参数三(通过依赖注入的方法) |
69 | public function hello(Request $request){ |
70 | $all = $request->param(''); |
71 | var_dump($all); |
72 | } |
73 | |
74 | ### 验证方式 |
75 | $data = [ |
76 | // 'name' => 'vendor', |
77 | // 'email' => 'vendor@qq.com', |
78 | // 'id' => $id |
79 | // ]; |
80 | //独立验证方式 |
81 | // $validate = new Validate([ |
82 | // 'name' => 'require|max:10', |
83 | // 'email' => 'email' |
84 | // ]); |
85 | |
86 | // 验证器方式(封装性更好些,推荐使用) |
87 | // $validate = new IDMustBePostiveInt(); |
88 | |
89 | // $result = $validate->batch()->check($data); |
90 | // echo $validate->getError(); |
91 | // if($result){ |
92 | // |
93 | // } else { |
94 | // return 'id必须是正整数1111'; |
95 | // } |