新手如何快速入门Python
学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层。虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如何开始入门Python。只要方向对了,就不怕路远。
设定目标
当你决定入门 Python 时,需要一个清晰且短期内可实现的目标,比如通过学习找一份初级程序员工作,目标明确后,你需要了解企业对初级程序员有哪些技能要求,下面是我从拉勾网找的一个初级 Python 工程师的任职要求:
1、熟悉 Python 及常用的 Web 开发框架;
2、至少熟悉一种数据库的使用,如MySQL、mongodb、redis等;
3、熟悉 Linux 操作系统及常用命令;
4、良好的编码习惯和文档编写习惯;
做 Python 开发除了熟悉语言本身之外,还需要掌握很多相关联的技能,好比打NBA,你不光要学如何投篮,还要练习力量、技战术等一整套东西。所以,一个普通 Python Web 开发工程师需要掌握的技能包括至少一个Web框架,比如:Django、Flask、Tornado,做业务系统离不开数据库的支撑,另外,还需要对Linux系统的基本操作和常用命令有所了解,因为以后你写到程序基本上都会运行在Linux平台上。
接下来我从这几个方面逐一介绍
Python3?
python3 官方文档下载地址:http://www.gooln.com/document/22338.html
不少新手总是纠结是学 Python2 还是 Python3,就像手里同时有包子和馒头,不知道先吃哪个,这种纠结完全就是徒增烦恼,因为它们是同一种语言,只有少部分地方语法不兼容,尽管目前大部分公司还在用 Python2,但是 Python3 逐渐成为主流已是不争事实,毕竟后者性能方面更占有优势,官方也在力推Python3。所以毫不犹豫地选择 Python3 吧,最多花一天的时间能把 Python2 中特有的内容搞懂。
开发工具
工欲善其事必先利其器,做 Python 开发的 IDE(编辑器)层出不穷,我只推荐 Pycharm 和 Sublime,它们的学习成本非常低,网上找一篇教程看了基本就能上手,Vim、Emacs 这样的远古神器还是放以后再去了解吧。另外,今后你所遇到的 90% 的问题都有可能通过Google和StackOverflow来解决。
学习资源
网上入门资源琳琅满目,一本好书能为你指点迷津。快速了解 Python 可以看一下 Learn Python in Y minutes 这篇文章。但千万不要被标题所迷惑,一门语言不可能几分钟就能学会,看完之后应该会对Python 有个初步的印象,照着示例操作完之后,你就要选择一本合适入门的教程,《A Byte of Python》是一本值得推荐的书籍,来说说我推荐这本书的理由。
《A Byte of Python》的中文名叫《简明 Python 教程》,这本书的最新版已经是第10版,基于 Python3.5,所以不担心是否知识落后的问题,其次,这本书的厚度152页非常适合入门,涵盖了 Python 入门所有内容,相对那些五六百页的大部头书来说非常精简了,2个星期能啃完。还有最重要的一点,这本书是免费的,在公众号python之禅回复 "byte" 免费获取《A Byte of Python》不同格式的电子书。
这本书看完之后,你应该能设计出简单程序出来。再推荐一本书《Python学习手册》作为进阶学习,内容相对要更深入,适合有一定编程基础的人阅读。
做Web开发,HTML、JS、CSS 是必须有所了解的,作为前端技能,不一定要深入了解,做到能写基本的HTML代码就够了,此外,你还需要了解 HTTP 协议(推荐《图解HTTP协议》)。目前比较主流的Web框架有 Django、Flask、Tornado,各自都有各自的特点,Django 文档丰富、Flask 短小精悍、Tornado 异步并发。这里推荐使用 Flask,推荐书目《Flask Web开发:基于Python的Web应用开发实战》
Linux 推荐《快乐的 Linux 命令行》,同样是一本非常经典的入门迷你书,没有太多理论,范围也不太宽,公众号回复 “linux” 免费获取。
MySQL只推荐一本《MySQL必知必会》,不到250页的小册子,实践性很强,没有什么艰深晦涩的理论堆砌,看完这本书基本入门数据库了
最后
只看书不会进步,思考和实践才有成长,自学编程是一个比较枯燥的过程,如果没有正向反馈,学习的积极性很容易被打压下来,所以你应该积极参与到相关的技术圈子中去,尝试去解答力所能及的新手问题,向圈子中的大牛们寻求帮助,善于总结自己所学到的东西,分享给更多的人,记住,你不是一个人在战斗。
本文介绍了WebStorm 遇到的问题总结,非常实用,有兴趣的同学可以参考一下本文最近自己WebStorm用得多一点了
和android studio一样,同样是IDEA的ide(记得自己还是eclipse的时候,原来同事很早就开始用IDEA了,记得6-7年前就有了)
自己记录下自己遇到的问题
这里先感谢帮助自己的后台伙伴们
提示代码不显示
写php的时候,不提示代码
这样很头痛
查了下,是 【节电模式】也就是【Power Save Mode】
(台式,就别省电了)
打开后, 就可以正常提示了
汉化的phpstorm,设置打不开
自己使用的版本是汉化的
对应的插件也是安装好的
自己想做一些自定义操作,但是打不开设置很麻烦
百度了一下,说是汉化包的问题
通常idea的插件,都是在lib下面
找了下,发现resources_cn.jar
这个文件
自己删除后(当然,也可以移到别的地方,万一要汉化的时候,还可以恢复)
再次打开,就可以了
微信小程序,wxss代码不提示
phpstorm还是挺智能的
但是,对微信小程序不是很友好(其实,感觉很多方面还是挺简单的,慢慢工具多了,开发会更简单,到时候肯定不值钱了)
其实, 微信的wxss感觉就是css,只是由于文件名不一样,没有关联而已
这个时候,我们只需要把问下的wxss文件,关联成css文件,即:
我们关联了对应的css文件后
就可以看见对应的css提示了
微信小程序,wxml代码不提示
和上面同理,只需要把wxml添加到xml的类型中即可
设置完以后,就可以简单使用了
数据表之间是纵横交叉、相互关联的,laravel的一对一,一对多比较好理解,本文重点通过实例给大家讲解 laravel中的多对多关系,感兴趣的朋友一起看看吧数据表之间是纵横交叉、相互关联的,laravel的一对一,一对多比较好理解,官网介绍滴很详细了,在此我就不赘述啦,重点我记下多对多的关系
一种常见的关联关系是多对多,即表A的某条记录通过中间表C与表B的多条记录关联,反之亦然。比如一个用户有多种角色,反之一个角色对应多个用户。
为了测试该关联关系,我们沿用官网的用户角色示例:
需要三张数据表:users、roles 和 role_user,role_user 表按照关联模型名的字母顺序命名(这里role_user是中间表),并且包含 user_id 和 role_id两个列。
多对多关联通过编写返回 belongsToMany 方法返回结果的方法来定义。废话不说多,直接上数据结构:
1:创建一个角色表roles,并添加一些初始化数据:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structureforusers
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
`remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES (Ƈ','admin','admin@163.com','$2y$10$J/yXqscucanrHAGZp9G6..Tu1Md.SOljX3M8WrHsUdrgat4zeSuhC','ilocXtjZJwhrmIdLG1cKOYegeCwQCkuyx1pYAOLuzY2PpScQFT5Ss7lBCi7i',-04-21 16:26:23',-12-14 09:29:59');
INSERT INTO `users` VALUES (ƈ','baidu',�@qq.com','$2y$10$2A5zJ4pnJ5uCp1DN3NX.5uj/Ap7P6O4nP2BaA55aFra8/rti1K6I2', null,-04-22 06:48:10',-04-22 06:48:10');
INSERT INTO `users` VALUES (Ɖ','fantasy',@qq.com','', null,-06-14 10:38:57',-06-15 10:39:01');
2:创建一个角色表roles,并添加一些初始化数据:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structureforroles
-- ----------------------------
DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Records of roles
-- ----------------------------
INSERT INTO `roles` VALUES (Ƈ','超级版主',-04-21 16:26:23',-12-14 09:29:59');
INSERT INTO `roles` VALUES (ƈ','司令',-04-22 06:48:10',-04-22 06:48:10');
INSERT INTO `roles` VALUES (Ɖ','军长',-06-14 10:38:57',-06-15 10:39:01');
INSERT INTO `roles` VALUES (Ɗ','司长',-06-07 10:41:41',-06-15 10:41:51');
INSERT INTO `roles` VALUES (Ƌ','团战',-06-22 10:41:44',-06-28 10:41:54');
INSERT INTO `roles` VALUES (ƌ','小兵',-06-22 10:41:47',-06-22 10:41:56');
3:创建一个中间表role_user用于记录users表与roles表的对应关系,并添加一些初始化数据:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structureforrole_user
-- ----------------------------
DROP TABLE IF EXISTS `role_user`;
CREATE TABLE `role_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`role_id` int(11) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of role_user
-- ----------------------------
INSERT INTO `role_user` VALUES (Ƈ',Ƈ',ƈ',-06-07 11:42:13',-06-21 11:32:16');
INSERT INTO `role_user` VALUES (ƈ',Ƈ',Ɖ',-06-07 11:32:13',-06-07 11:22:13');
INSERT INTO `role_user` VALUES (Ɖ',ƈ',Ɗ',-06-07 11:32:13',-06-07 11:12:13');
INSERT INTO `role_user` VALUES (Ɗ',Ƈ',Ƌ',-06-07 11:32:13',-06-07 11:22:13');
INSERT INTO `role_user` VALUES (Ƌ',Ɖ',ƌ',-06-07 11:32:13',-06-07 11:52:13');
INSERT INTO `role_user` VALUES (ƌ',Ɖ',ƈ',-06-07 11:32:13',-06-07 11:42:13');
INSERT INTO `role_user` VALUES (ƍ',ƈ',ƈ',-06-07 11:42:13',-06-07 11:52:13');
注意我们定义中间表的时候没有在结尾加s并且命名规则是按照字母表顺序,将role放在前面,user放在后面,并且用_分隔,这一切都是为了适应Eloquent模型关联的默认设置:在定义多对多关联的时候如果没有指定中间表,Eloquent默认的中间表使用这种规则拼接出来。
创建一个Role模型:
<?php
namespaceApp\Models;
useIlluminate\Database\Eloquent\Model;
/**
* Class Role
* @package App\Models
* @mixin \Eloquent
*/
classRoleextendsModel
{
}
然后我们在 User 模型上定义 roles 方法:
<?php
namespaceApp\Models;
useIlluminate\Database\Eloquent\Model;
/**
* Class User
* @package App\Models
* @mixin \Eloquent
*/
classUserextendsModel
{
/**
* 用户角色
*/
publicfunctionroles()
{
return$this->belongsToMany('App\Models\Role');
}
}
注:正如我们上面提到的,如果中间表不是role_user,那么需要将中间表作为第二个参数传入belongsToMany方法,如果中间表中的字段不是user_id和role_id,这里我们姑且将其命名为$user_id和$role_id,那么需要将$user_id作为第三个参数传入该方法,$role_id作为第四个参数传入该方法,如果关联方法名不是roles还可以将对应的关联方法名作为第五个参数传入该方法。
接下来我们在控制器中编写测试代码:
<?php
$user= User::find(1);
$roles=$user->roles;
echo'用户'.$user->name.'所拥有的角色:'
foreach($rolesas$role)
echo$role->name.' '//对应输出为:用户admin所拥有的角色:司令 军长 团战
当然,和所有其它关联关系类型一样,你可以调用roles 方法来添加条件约束到关联查询上:
User::find(1)->roles()->orderBy('name')->get();
正如前面所提到的,为了确定关联关系连接表的表名,Eloquent 以字母顺序连接两个关联模型的名字。不过,你可以重写这种约定 —— 通过传递第二个参数到 belongsToMany 方法:
return$this->belongsToMany('App\Models\Role','user_roles');
除了自定义连接表的表名,你还可以通过传递额外参数到 belongsToMany 方法来自定义该表中字段的列名。第三个参数是你定义关联关系模型的外键名称,第四个参数你要连接到的模型的外键名称:
return$this->belongsToMany('App\Models\Role','user_roles','user_id','role_id');
定义相对的关联关系
要定义与多对多关联相对的关联关系,只需在关联模型中调用一下 belongsToMany 方法即可。我们在 Role 模型中定义 users 方法:
<?php
namespaceApp\Models;
useIlluminate\Database\Eloquent\Model;
/**
* Class Role
* @package App\Models
* @mixin \Eloquent
*/
classRoleextendsModel
{
/**
* 角色用户
*/
publicfunctionusers()
{
return$this->belongsToMany('App\Models\User');
}
}
正如你所看到的,定义的关联关系和与其对应的User 中定义的一模一样,只是前者引用 App\Models\Role,后者引用App\Models\User,由于我们再次使用了 belongsToMany 方法,所有的常用表和键自定义选项在定义与多对多相对的关联关系时都是可用的。
测试代码如下:
$role= Role::find(2);
$users=$role->users;
echo'角色#'.$role->name.'下面的用户:'
foreach($usersas$user)
echo$user->name.' '//对应输出为:角色#司令下面的用户:admin fantasy baidu
正如你看到的,处理多对多关联要求一个中间表。Eloquent 提供了一些有用的方法来与这个中间表进行交互,例如,我们假设 User 对象有很多与之关联的 Role 对象,访问这些关联关系之后,我们可以使用这些模型上的pivot 属性访问中间表字段:
$roles= User::find(1)->roles;
foreach($rolesas$role)
echo$role->pivot->role_id.'
'//对应输出为:2 3 5
注意我们获取到的每一个 Role 模型都被自动赋上了 pivot 属性。该属性包含一个代表中间表的模型,并且可以像其它 Eloquent 模型一样使用。
默认情况下,只有模型主键才能用在 pivot 对象上,如果你的 pivot 表包含额外的属性,必须在定义关联关系时进行指定:
return$this->belongsToMany('App\Models\Role')->withPivot('column1','column2');
比如我们修改role_user表增加一个字段 username 数据如下:
修改模型User:
<?php
namespaceApp\Models;
useIlluminate\Database\Eloquent\Model;
/**
* Class User
* @package App\Models
* @mixin \Eloquent
*/
classUserextendsModel
{
/**
* 用户角色
*/
publicfunctionroles()
{
//return $this->belongsToMany('App\Models\Role');
return$this->belongsToMany('App\Models\Role')->withPivot('username');
}
}
测试代码如下:
$user= User::find(1);
foreach($user->rolesas$role)
echo$role->pivot->username;//对应输出为:马特马特2马特3
如果你想要你的 pivot 表自动包含created_at 和 updated_at 时间戳,在关联关系定义时使用 withTimestamps 方法:
return$this->belongsToMany('App\Models\Role')->withTimestamps();
通过中间表字段过滤关联关系
你还可以在定义关联关系的时候使用 wherePivot 和 wherePivotIn 方法过滤belongsToMany 返回的结果集:
return$this->belongsToMany('App\Models\Role')->withPivot('username')->wherePivot('username','马特2');
//return $this->belongsToMany('App\Models\Role')->wherePivotIn('role_id', [1, 2]);
测试代码如下:
$user= User::find(1);
print_r($user->roles->toArray());
以上对应输出:
Array
(
[0] => Array
(
[id] => 3
[name] => 军长
[created_at] => 2017-06-14 10:38:57
[updated_at] => 2017-06-15 10:39:01
[pivot] => Array
(
[user_id] => 1
[role_id] => 3
[username] => 马特2
)
)
)
如果你想要你的pivot表自动包含created_at和updated_at时间戳,在关联关系定义时使用withTimestamps方法:
return$this->belongsToMany('App\Models\Role')->withTimestamps();
以上所述是小编给大家介绍的PHP laravel中的多对多关系实例详解,希望对大家有所帮助。
这篇文章主要介绍了PHP简单获取随机数的方法,结合实例形式分析了php实现指定范围随机数与指定字符序列随机数的简单实现技巧,需要的朋友可以参考下本文实例讲述了PHP简单获取随机数的常用方法。分享给大家供大家参考,具体如下:
1.直接获取从min-max的数,例如1-20:
代码如下 | 复制代码 |
$randnum= mt_rand(1, 20); |
2.在一个数组里面随机选择一个(验证码的时候需要字母、数字混合的情况)
代码如下 | 复制代码 |
functionrandUid(){ $str="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20";//要显示的字符,可自己进行增删 $list=explode(",",$str); $cmax=count($list) - 1; $randnum= mt_rand(0,$cmax); $uid=$list[$randnum]; } |
希望本文所述对大家PHP程序设计有所帮助。
相关文章
- 这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,堪称全网最绚烂,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试...2022-02-14
- 在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
python-for x in range的用法(注意要点、细节)
这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 这篇文章算是超级入门级别的了,我们下面来给各位介绍在photoshop画斜线/直线/虚线的教程了,希望下面这篇文章给你入门来帮助。 PS怎么画斜线 选择铅笔工具,或者画笔...2016-09-14
python Matplotlib基础--如何添加文本和标注
这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- 这篇文章主要介绍了使用Python的pencolor函数实现渐变色功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-09
- 在本篇文章里小编给大家整理的是一篇关于python中使用np.delete()的实例方法,对此有兴趣的朋友们可以学习参考下。...2021-02-01
- 这篇文章主要为大家详细介绍了python实现双色球随机选号,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-02
- 这篇文章主要介绍了python自动化办公操作PPT的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-05
Python getsizeof()和getsize()区分详解
这篇文章主要介绍了Python getsizeof()和getsize()区分详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-20- 这篇文章主要介绍了解决python 两个时间戳相减出现结果错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-12
- 这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25