Python运维开发【一】:简介和入门
Python简介
Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。
ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是非开放造成的。Guido 决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。
就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。
Python 已经成为最受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,python的使用率是呈线性增长。
Python入门
一、python安装
官网:https://www.python.org/downloads/
windows系统:
官网下载安装包
https://www.python.org/downloads/
安装
按照选项进行选择
3.0以上版本建议安装过程中直接选择添加环境变量选项
配置环境变量(2.7版本)
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
如:原来的值;C:\python27,切记前面有分号
Linux系统:
无需安装,默认自带Python环境。
如:Centos6.8_X86_64 自带Python2.6.6,如有需要,可更新至3.0以上
环境:yum install openssl-devel gcc++ gcc 可直接安装pip
更新版本到3.5.2
下载:wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
解压:tar zxvf Python-3.5.2.tgz
编译:cd Python-3.5.2
./configure --prefix=/usr/local/python3.5
安装:make && make install
默认安装位置/usr/local/lib/python3.5
执行命令python3.5进入到运行环境
mv /usr/bin/python /usr/bin/python2.6.6
ln -s /usr/local/python3.5/bin/python3.5 /usr/bin/python
修改yum环境 vim /usr/bin/yum
改为如下内容 #!/usr/bin/python2.6.6
pip安装:
windows:
1.在以下地址下载最新的PIP安装文件:http://pypi.python.org/pypi/pip#downloads
2.下载pip-9.01.tar.gz (md5, pgp)完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入:python setup.py install
3.安装好之后,我们直接在命令行输入pip,同样会显示‘pip’不是内部命令,也不是可运行的程序。因为我们还没有添加环境变量
C:\Python27\Scripts
linux:
1、官网下载pip安装包 https://pypi.python.org/pypi/pip
2、解压下载的文件 tar zxvf pip-9.0.1.tar.gz
3、安装 python setup.py install
4、执行pip命令进行验证 ln -s /usr/local/python3.5/bin/pip3 /usr/bin/pip3
二、第一个python程序
Hello World!
# vim hello.py
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author:Arthur 4 5 print ("Hello World!")
#执行:
#python hello.py
三、变量赋值及命名规则
声明变量
声明一个变量name,变量name的值为:"Arthur Liu"
1 # _*_ coding:utf-8 _*_ 2 3 name = "Arthur Liu"
变量命名的规则
变量定义的规则: 变量名只能是 字母、数字或下划线的任意组合 变量名的第一个字符不能是数字 以下关键字不能声明为变量名 ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
变量扩展知识
给变量name1赋值"Arthur Liu",变量name2赋值为name1,name1重新赋值为"Jack Chen",此时name2的值为多少?
1 # _*_ coding:utf-8 _*_ 2 3 name1 = "Arthur Liu" 4 5 name2 = name1 6 print(name1,name2) 7 8 name1 = "Jack Chen" 9 print("What is the value of name2 now?") 10 print(name1,name2) 11 12 #name1的值为Jack Chen,name2此时的值仍为Arthur Liu
- name1指向Arthur Liu
- name2指向name1
- name2根据name1指向Arthur Liu
- name1重新指向Jack Chen
注:name2指向name1时,实际上指向的是name1指向的值(内存),所以不会随着name1指向值的变化而变化
四、字符编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
关于中文
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ASCII无法表示中文
SyntaxError: Non-ASCII character
1 #!/usr/bin/env python 2 print("你好,世界")
改正:应该显示的告诉python解释器,用什么编码来执行源代码:
1 #!/usr/bin/env python 2 #_*_ coding:utf-8 _*_ 3 print("你好,世界")
注:python2.X版本,默认的字符编码为ASCII,而python3.X版本,默认的字符编码为Unicode,不用声明字符编码可以直接显示中文,不会报错。
注释
当行注视:# 被注释内容
多行注释:""" 被注释内容 """
五、用户交互及字符串拼接
跟用户进行交互,并把输入的信息打印出来
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: Arthur 4 ###########用户交互及字符串拼接################ 5 # python2.X与python3.X区别: python2.X raw_input = python3.X input 6 # 提示用户输入姓名、年龄、工作、工资并以信息列表的形式打印出 7 8 #name = raw_input("What is your name?") #only on python 2.x 9 name = input("Please input your name:") 10 age = int(input("Please input your age:")) #str强制转换为int 11 job = input("Please input your job:") 12 salary = input("Please input your salary:") 13 14 info1 = ''' 15 ------------ Info of %s --------- 16 Name:%s 17 Age:%d 18 Job:%s 19 Salary:%s 20 ''' %(name,name,age,job,salary) #%s检测数据类型为字符串,%d检测数据类型为整数,%f检测数据类型为浮点数 强制 21 print(info1) 22 23 info2 = ''' 24 ------------ Info of {_Name} --------- 25 Name:{_Name} 26 Age:{_Age} 27 Job:{_Job} 28 Salary:{_Salary} 29 ''' .format(_Name=name, 30 _Age=age, 31 _Job=job, 32 _Salary=salary) 33 print(info2) 34 35 info3 = ''' 36 ------------ Info of {0} --------- 37 Name:{0} 38 Age:{1} 39 Job:{2} 40 Salary:{3} 41 ''' .format(name,age,job,salary) 42 print(info3)
六、if 判断语句
1、用if语句判断用户登录,密码密文利用getpass 模块中的 getpass方法:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author:Arthur 4 """验证用户登录-密文密码利用getpass模块中的getpass方法""" 5 # 提示输入用户名密码 6 # 验证用户名密码 7 # 如果错误,则输出用户名密码无效 8 # 如果成功,则输出Hello,xxx! 9 10 import getpass #标准模块,import调用 11 12 name = input("Please input your name:") 13 password = getpass.getpass("Please input your password:") 14 15 if name == "Arthur" and password == "test@123": 16 print ("Hello %s!"%name) 17 else: 18 print ("Invalid username or password!")
2、用if语句实现猜年龄游戏
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 5 my_age = 25 6 7 user_input = int(input("input your guess num:")) 8 9 if user_input == my_age: 10 print("Congratulations, you got it !") 11 elif user_input < my_age: 12 print("Oops,think bigger!") 13 else: 14 print("think smaller!")
七、while循环语句
1、用while语句循环100次
1 # Author:Arthur Liu 2 count = 0 #从0开始 3 while True: 4 print("你是我的小呀小苹果。。。",count) #从0开始 5 count +=1 #逐次加1 6 if count == 100: #count等于100,执行下面代码 7 print("---end---怎么爱你都不嫌多。。。") 8 break
2、用while循环,实现用户猜年龄,最多3次机会,猜不对就退出程序
1 # _*_ coding:utf-8 _*_ 2 # Author:Arthur Liu 3 4 my_age = 25 5 6 count = 0 7 while count < 3: 8 user_input = int(input("input your guess num:")) 9 10 if user_input == my_age: 11 print("Congratulations, you got it !") 12 break 13 elif user_input < my_age: 14 print("think bigger!") 15 else: 16 print("think smaller!") 17 count += 1 #每次loop 计数器+1 18 else: 19 print("猜这么多次都不对,再见.")
八、for循环语句
1、用for循环语句实现用户猜年龄,最多3次机会,猜不对就退出程序
1 # _*_ coding:utf-8 _*_ 2 # Author:Arthur Liu 3 4 my_age = 25 5 6 for i in range(3): 7 user_input = int(input("input your guess num:")) 8 if user_input == my_age: 9 print("Congratulations, you got it !") 10 break 11 elif user_input < my_age: 12 print("think bigger!") 13 else: 14 print("think smaller!") 15 else: 16 print("猜这么多次都不对,再见.")
九、练习
1、编写登陆接口
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错3次后锁定
login_interface.py 程序代码
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author: Arthur ################登录接口程序################ # -*- 运行环境python3.5.2 -*- #user_information、locked_information、day1_login_interface.py三个文件拷贝到同一级目录 #授权:chmod 755 day1_login_interface.py #执行:python day1_login_interface.py ####记录可登录用户、密码信息文件user_information#### # Dave dave123 # John john123 # Luffy luffy123 ####记录被锁定的用户信息文件locked_information#### # lzl # Alex # Count = 1 #设置计数器,统计下面第一个while大循环的次数 赋值变量Count,初始值为1 Last_user = "" #针对上次登录的用户名进行记录,如果连续三次登录错误的用户名是一致的话才进行锁定 #赋值变量Last_user,初始值为空 Match_count = 1 #统计Last_user与上次登录的用户名匹配的次数,变量Match_count初始值为1 while True: Locked = open("locked_information", "r") # 读取被锁定用户名信息文件 User_pwd = open("user_information", "r") # 读取可登录的用户、密码信息文件 User = input("Please enter the login username:") #提示用户输入登录用户名并赋值给User Passwd = input("Please enter login password:") # 提示用户输入登录密码并赋值给Passwd if len(User) == 0: print("Error:Enter the user is null! please try again..") continue if Last_user == User: #if语句判断,本次登录的用户名跟上次登录的用户名是否匹配 Match_count +=1 #如果匹配成功,表示两次连续登录的用户名一致,Match_count计数加1 else: #如果匹配失败,Match_count计数恢复为初始值1 Match_count = 1 Re_count = 3 - Count #设置变量Re_count为还进行登录的剩余次数,判断登录失败后会用到 for Blacklist in Locked.readlines(): #for循环读取被锁定用户名,生成变量Blacklist Blacklist = Blacklist.strip("\n") #对变量Blacklist进行去换行符操作 if User == Blacklist: #判断如果输入的用户名在Blacklist中,则提示用户被锁定并退出登录 print ("Login username ",User," is locked, login fails...") exit() #退出程序 for i_f_m in User_pwd.readlines(): #for循环读取可登录用户、密码信息文件,赋值变量i_f_m i_f_m = (i_f_m.strip("\n")).split() #对变量i_f_m进行先去换行符,然后以空格符分割为列表的操作 if User == i_f_m[0] and Passwd == i_f_m[1]: #对登录用户名和密码进行匹配,两者都匹配成功则显示恭喜登陆成功 print ("Congratulations to login successful!") exit() #退出程序 print(User,Passwd) else: if Re_count > 0 : #验证上面for循环匹配失败并且剩余登录次数大于0后,提示错误和剩余次数 #如果去掉if判断,则在匹配用户锁定时打印信息重合,放到下面while循环里面则会添加多余输出 print("Error: The username and password mistate! You can also try", Re_count, "times...") while Re_count > 0 : #while循环语句,重试登录次数大于0时,提示用户是否还要继续登陆 If_cont = input("Whether or not to continue to login?(Y/N):") if If_cont == "Y": #匹配字符Y break #跳出当前while,重新输入用户名密码 elif If_cont == "N": #匹配字符N print ("-- Bye --") exit() #终止程序 else: #字符输入错误,重新提示输入正确的字符Y 和 N print("* Please enter 【Y】 or 【N】 *") continue #跳出当前循环执行下次循环 else: #while循环语句,当用户重试登录次数为0时,执行下面语句 if Match_count == 3: #连续三次输入的用户名一致,把用户名加入到黑名单 Locked = open("locked_information", "a") #对文件locked_information追加写操作 Locked.write(User + "\n") #把用户名写入到黑名单并执行下换行符 print("Error: The username and password mistate! The current user ",User," is locked...") break #提示锁定用户并退出程序 else: #连续三次输入的用户名不一致,提示用户名密码错误,不进行锁定 print ("Error: The username and password mistate! Bye-bye!") break #退出程序 Count +=1 #循环结束,Count计数加1 Last_user = User #循环结束,Last_userc重新赋值 Locked.close() User_pwd.close() login_interface.py
流程图:
README:
# 这是一个模拟真实用户登录系统的程序
### Author:Arthur
### 实现效果:
* user_information文件记录了可登录用户名和密码,每次登录只有完全匹配文件中的用户名和密码才能登录
* locked_information文件记录了被锁定的用户,每次登录输入被锁定的用户,会提示当前用户被锁定,并退出
* 用户连续三次登录失败且三次输入的用户名一样,会显示当前用户被锁定,退出程序并且把用户名记录到locked_information
* 用户连续三次登录失败,但三次的用户名不一样,提示登录失败,退出程序用户名不锁定
* 前两次登录失败时可选择是否还要继续登录,登录失败时会显示剩余登录次数
### Bug 可完善的地方:
* 随意输入任何用户名都可进行登录,即使不存在与user_information文件中也可被锁定
* 输入的密码时可以改成密文的形式
### 运行环境:
* Python3.0+ 最佳Python3.5.2
### 目录结构:
Day1
├── 登录接口
│ ├── day1_login_interface.py
│ └── locked_information
│ ├── user_information
│ ├── login_interface.png
│ └── readme
### linux 运行说明:
* user_information、locked_information、day1_login_interface.py拷贝到同一级目录下
* 加执行权限 chmod 755 day1_login_interface.py
* 执行程序 python day1_login_interface.py
readme
2、多级菜单
- 三级菜单
- 可依次选择进入各子菜单
- 子菜单实现b可以返回上一级,q可以退出程序
- 所需知识点:列表、字典
multistage_menu.py
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author:Arthur ################多级菜单,查询街道/地区邮政编码################ # -*- 运行环境python3.5.2 -*- #授权:chmod 755 day1_multistage_menu.py #执行:python day1_multistage_menu.py #注:定义Main_menu主菜单 字典套字典套列表形式 Main_menu = { #定义主菜单Main_menu作为数据库 '北京':{ '石景山区':['八宝山街道','老山街道','八角街道','古城街道','苹果园街道','金顶街街道','广宁街道','鲁谷社区'], '朝阳区':['和平街街道','朝外街道','劲松街道','建外街道','呼家楼街道','八里庄街道','三里屯街道','潘家园街道'], '昌平区':['城北街道','城南街道','天通苑北街道','天通苑南街道','霍营街道','回龙观街道','龙泽园街道','史各庄街道'], '东城区':['安定门街道','建国门街道','东直门街道','天坛街道','东四街道','龙潭街道','前门街道','景山街道'], '海淀区':['清华园街道','香山街道','清河街道','上地街道','万柳地区','中关村街道','海淀街道','学院路街道'] }, '上海':{ '黄浦区':['南京东路街道','外滩街道','半淞园路街道','小东门街道','豫园街道','老西门街道','五里桥街道','淮海中路街道'], '浦东新区':['潍坊新村街道','陆家嘴街道','周家渡街道','塘桥街道','洋泾街道','东明路街道','花木街道','浦兴路街道'], '徐汇区':['湖南路街道','天平路街道','枫林路街道','徐家汇街道','斜土路街道','长桥街道','龙华街道','田林街道'], '长宁区':["华阳路街道","新华路街道","江苏路街道","天山路街道","周家桥街道","虹桥街道","仙霞新村街道","程家桥街道"], '杨浦区':['定海路街道','平凉路街道','江浦路街道','四平路街道','控江路街道','长白新村街道','延吉新村街道','殷行街道'] }, '香港':{ '香港岛':['中西区','湾仔区','东区','南区','石澳','大浪湾','夏萍湾','龟背湾'], '九龙半岛':['油尖旺区','深水埗区','九龙城区','黄大仙区','观塘区','维多利亚港','旺角','新蒲岗'], '新界':['北区','大埔区','沙田区','西贡区','荃湾区','屯门区','元朗区','葵青区'], '港岛区':['中环','湾仔','南区','太平山','尖沙咀','钻石山','山顶','大屿山'], '九龙区':['龙门','九龙','侯王庙','万佛寺','东普陀','青松观','妙法寺','灵渡寺'] } } import random #调用random,生成邮编码 while True: Num_ct = 1 #城市ID序号,初始值1 Dic_city = {} #定义字典,初始值空 Dic_county = {} Dic_street = {} print(" -*- 邮政编码查询系统 -*-") for City in Main_menu.keys(): #循环 把可选的城市赋值给变量City print ("",Num_ct,City) #打印ID序号和城市名 Dic_city[Num_ct] = City #绑定ID序号和城市名,生成字典Dic_city Num_ct +=1 #每次循环ID序号+1 print( " q", "退出程序") City_id = input("请输入要查询城市的ID序号 :") #for循环结束,输入要选择的城市ID 注:此时输入的类型为字符串 if City_id == "q": # 判断输入是否为q 退出程序 print(" -*- Bye-bye! -*-") exit() elif City_id in ['1','2','3']: #匹配输入是否为1,2,3 City_id = int(City_id) #字符类型转换 注:如果不转换,下面字典匹配不到key值 Sec_menu = (Main_menu.get((Dic_city.get(City_id)))) #定义二级菜单,生成二级数据库 while True: #while 循环 Num_co = 1 #市区ID序号,初始值1 for County in Sec_menu.keys(): #循环 把可选的市区赋值给变量County print("",Num_co, County) #打印ID序号和市区名 Dic_county[Num_co] = County #绑定ID序号和市区名,生成字典Dic_county Num_co += 1 #每次循环ID序号+1 print(" b", "返回上级重新选择城市", "\n", "q", "退出程序") County_id = input("请输入要查询城区的ID序号 :") #输入要选择的市区ID if County_id == "b": #判断输入是否为b 返回上级菜单 break elif County_id == "q": #判断输入是否为q 退出程序 print(" -*- Bye-bye! -*-") exit() elif County_id in ['1','2','3','4','5']: #判断输入是否为1-5 County_id = int(County_id) #字符类型转换 Third_menu = (Sec_menu.get((Dic_county.get(County_id)))) #定义三级菜单,生成三级数据库 while True: #while 循环 Num_st = 1 #街道数字标号,初始值1 for Street in Third_menu: #循环 把可选的街道赋值给变量Street print ("",Num_st,Street) #打印ID序号和街道名 Dic_street[Num_st] = Street #绑定ID序号和市区名,生成字典Dic_street Num_st +=1 #每次循环ID序号+1 print (" b","返回上级重新查询城区","\n","q","退出程序") Street_id = input("请输入要查询街道/区域的ID序号 :") #输入要选择的街道ID序号 if Street_id == "b": #判断输入是否为b 返回上级菜单 break elif Street_id == "q": #判断输入是否为q 退出程序 print(" -*- Bye-bye! -*-") exit() elif Street_id in ['1', '2', '3', '4', '5','6','7','8']: #判断输入是否为1-8 Street_id = int(Street_id) #字符类型转换 print("您查询的地址:",Dic_city.get(City_id),Dic_county.get(County_id),Dic_street.get(Street_id), " 邮政编码为:",random.randint(100000,300000)) #查询成功 输出 exit() #查询成功 退出 ####留位####注:如果还行输入成功后加判断是否继续查询,可在此加代码 else: #输入格式错误,提示 print(" 输入的格式错误!请重新输入数字 1 & 2 & ... & 7 & 8 或字符 b & q") else: #输入格式错误,提示 print(" 输入的格式错误!请重新输入数字 1 & 2 & 3 & 4 & 5 或字符 b & q") else: #输入格式错误,提示 print(" 输入的格式错误!请重新输入数字 1 & 2 & 3 或 字符 q") multistage_menu.py
流程图:
README:
# 这是一个模拟查询街道/地区邮政编码的程序
# 多级菜单,使用了字典套字典套列表的形式
### Author:Arthur
### 实现效果:
* 进入程序每级菜单可选择要查询的ID序号,选择序号会进入到相应的地区子菜单中
* 每级菜单都可输入b返回上一级菜单,输入q可退出程序
* 任何一级菜单输入错误的字符,会提示重新输入ID序号
* 最后三级菜单选择完毕,输入选择地区的邮政编码,查询完成,退出程序
### Bug 可完善的地方:
* 邮政编码由随机数设定,数据不准确
* 由于用到的字典是无序的,所以同一级菜单每次显示的ID序号可能不一样
### 运行环境:
* Python3.0+ 最佳Python3.5.2
### 目录结构:
Day1
├── 三级菜单
│ ├── day1_multistage_menu.py
│ ├── multistage_menu.png
│ └── readme
### linux 运行说明:
* 加执行权限 chmod 755 day1_multistage_menu.py
* 执行程序 python day1_multistage_menu.py
readme
十、pycharm使用
1、下载安装:
http://www.jetbrains.com/pycharm/download/#section=windows
pycharm是一种Python IDE,能够帮助我们在编写代码时提高效率。 网上提供的有专业版和教育版之分。
2、常用设置
1)解释器设置:
2)模板设置:
不用每次写头信息:解释器,字符集,作者等等
3)文字大小和颜色和风格
打开file->settings->Editor-> Font / Color Scheme
3、常用快捷键
1、编辑(Editing)
Ctrl + Space 基本的代码完成(类、方法、属性)
Ctrl + Alt + Space 快速导入任意类
Ctrl + Shift + Enter 语句完成
Ctrl + P 参数信息(在方法中调用参数)
Ctrl + Q 快速查看文档
F1 外部文档
Shift + F1 外部文档,进入web文档主页
Ctrl + Shift + Z --> Redo 重做
Ctrl + 鼠标 简介/进入代码定义
Ctrl + F1 显示错误描述或警告信息
Alt + Insert 自动生成代码
Ctrl + O 重新方法
Ctrl + Alt + T 选中
Ctrl + / 行注释/取消行注释
Ctrl + Shift + / 块注释
Ctrl + W 选中增加的代码块
Ctrl + Shift + W 回到之前状态
Ctrl + Shift + ]/[ 选定代码块结束、开始
Alt + Enter 快速修正
Ctrl + Alt + L 代码格式化
Ctrl + Alt + O 优化导入
Ctrl + Alt + I 自动缩进
Tab / Shift + Tab 缩进、不缩进当前行
Ctrl+X/Shift+Delete 剪切当前行或选定的代码块到剪贴板
Ctrl+C/Ctrl+Insert 复制当前行或选定的代码块到剪贴板
Ctrl+V/Shift+Insert 从剪贴板粘贴
Ctrl + Shift + V 从最近的缓冲区粘贴
Ctrl + D 复制选定的区域或行
Ctrl + Y 删除选定的行
Ctrl + Shift + J 添加智能线
Ctrl + Enter 智能线切割
Shift + Enter 另起一行
Ctrl + Shift + U 在选定的区域或代码块间切换
Ctrl + Delete 删除到字符结束
Ctrl + Backspace 删除到字符开始
Ctrl + Numpad+/- 展开/折叠代码块(当前位置的:函数,注释等)
Ctrl + shift + Numpad+/- 展开/折叠所有代码块
Ctrl + F4 关闭运行的选项卡
2、查找/替换(Search/Replace)
F3 下一个
Shift + F3 前一个
Ctrl + R 替换
Ctrl + Shift + F 或者连续2次敲击shift 全局查找{可以在整个项目中查找某个字符串什么的,如查找某个函数名字符串看之前是怎么使用这个函数的}
Ctrl + Shift + R 全局替换
3、运行(Running)
Alt + Shift + F10 运行模式配置
Alt + Shift + F9 调试模式配置
Shift + F10 运行
Shift + F9 调试
Ctrl + Shift + F10 运行编辑器配置
Ctrl + Alt + R 运行manage.py任务
4、调试(Debugging)
F8 跳过
F7 进入
Shift + F8 退出
Alt + F9 运行游标
Alt + F8 验证表达式
Ctrl + Alt + F8 快速验证表达式
F9 恢复程序
Ctrl + F8 断点开关
Ctrl + Shift + F8 查看断点
5、导航(Navigation)
Ctrl + N 跳转到类
Ctrl + Shift + N 跳转到符号
Alt + Right/Left 跳转到下一个、前一个编辑的选项卡
F12 回到先前的工具窗口
Esc 从工具窗口回到编辑窗口
Shift + Esc 隐藏运行的、最近运行的窗口
Ctrl + Shift + F4 关闭主动运行的选项卡
Ctrl + G 查看当前行号、字符号
Ctrl + E 当前文件弹出,打开最近使用的文件列表
Ctrl+Alt+Left/Right 后退、前进
Ctrl+Shift+Backspace 导航到最近编辑区域
Alt + F1 查找当前文件或标识
Ctrl+B / Ctrl+Click 跳转到声明
Ctrl + Alt + B 跳转到实现
Ctrl + Shift + I查看快速定义
Ctrl + Shift + B跳转到类型声明
Ctrl + U跳转到父方法、父类
Alt + Up/Down跳转到上一个、下一个方法
Ctrl + ]/[跳转到代码块结束、开始
Ctrl + F12弹出文件结构
Ctrl + H类型层次结构
Ctrl + Shift + H方法层次结构
Ctrl + Alt + H调用层次结构
F2 / Shift + F2下一条、前一条高亮的错误
F4 / Ctrl + Enter编辑资源、查看资源
Alt + Home显示导航条F11书签开关
Ctrl + Shift + F11书签助记开关
Ctrl + #[0-9]跳转到标识的书签
Shift + F11显示书签
6、搜索相关(Usage Search)
Alt + F7/Ctrl + F7文件中查询用法
Ctrl + Shift + F7文件中用法高亮显示
Ctrl + Alt + F7显示用法
7、重构(Refactoring)
F5复制F6剪切
Alt + Delete安全删除
Shift + F6重命名
Ctrl + F6更改签名
Ctrl + Alt + N内联
Ctrl + Alt + M提取方法
Ctrl + Alt + V提取属性
Ctrl + Alt + F提取字段
Ctrl + Alt + C提取常量
Ctrl + Alt + P提取参数
8、控制VCS/Local History
Ctrl + K提交项目
Ctrl + T更新项目
Alt + Shift + C查看最近的变化
Alt + BackQuote(’)VCS快速弹出
9、模版(Live Templates)
Ctrl + Alt + J当前行使用模版
Ctrl +J插入模版
10、基本(General)
Alt + #[0-9]打开相应的工具窗口
Ctrl + Alt + Y同步
Ctrl + Shift + F12最大化编辑开关
Alt + Shift + F添加到最喜欢
Alt + Shift + I根据配置检查当前文件
Ctrl + BackQuote(’)快速切换当前计划
Ctrl + Alt + S 打开设置页
Ctrl + Shift + A查找编辑器里所有的动作
Ctrl + Tab在窗口间进行切换