初识python

介绍

python相较于shell优点

  • python更强大,功能丰富,执行效率比shell高、
  • python可以跨平台,可移植性好,标椎统一
  • python模块丰富,多种应用场景
  • 顺应开发型运维的趋势,更高薪

python起源

  • python的创始人为Guido von Rossum(吉多·范·罗苏姆),俗称”龟叔“,荷兰人。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者
  • ABC是由Guido参加设计的一种教学语言。是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是其非开放(封闭,不开源)造成的。Guido决心在Python中避免这一错误。同时他还想实现在ABC 中闪现过但未曾实现的东西。就这样,Python在Guido手中诞生了
  • 吉多有⼀句名⾔:Life is short, I need python(⼈⽣苦短,我⽤python!) 。同⼀样问题,⽤不同的语⾔解决,代码量差距还是很多的,⼀般情况下Python是Java的1/5,所 以说⼈⽣苦短,我⽤Python

python优缺点

优点:

  • 简单,易学,易懂,开发效率高:Python容易上手,语法较简单。在linux上和写shell一样,拿着vi都可以写,直接就可以运行
  • 免费、开源:运维用的大部分软件都是开源
  • 可移植性,跨平台:Python已经被移植在许多不同的平台上,Python程序无需修改就可以在Linux,Windows,mac等平台上运行
  • 可扩展性:如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们
  • 丰富的库:Python的库及其丰富,它可以帮助你处理及应对各种场景应用
  • 规范的代码:Python采用强制缩进的方式使得代码具有极佳的可读性

缺点:

  • 执行效率慢 : 这是解释型语言的通病,同时这个缺点也被计算机的性能越来越强所弥补。有些场景慢个几微秒几毫秒,一般也感觉不到。
  • 代码不能加密: 这也是解释型语言的通有毛病,当然也有一些方法可以混淆代码(解决方法: 参考优点的第4条)

应用场景

  • 操作系统管理、服务器运维的自动化脚本:一般说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本

  • Web开发:Python经常被用于Web开发。比如,通过mod_wsgi模块,Apache可以运行用Python编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的通信。一些Web框架,如Django,TurboGears,web2py,Zope等,可以让程序员轻松地开发和管理复杂的Web程序

  • 服务器软件(网络软件):Python对于各种网络协议的支持很完善,因此经常被用于编写服务器软件、网络爬虫。第三方库Twisted支持异步网络编程和多数标准的网络协议(包含客户端和服务器),并且提供了多种工具,被广泛用于编写高性能的服务器软件

  • 游戏:很多游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型

  • 科学计算:NumPy,SciPy,Matplotlib可以让Python程序员编写科学计算程序

  • 其它领域:无人驾驶,人工智能等

解释型语言&编译型语言

  • 计算机只能识别机器语言(如:01010101001这种), 程序员不能直接去写01这种代码,所以要程序员所编写的程序语言翻译成机器语言。将其他语言翻译成机器语言的工具,称之为编译器
  • 编译器翻译的方式有两种,一种是编译,一种是解释。区别如下:

在这里插入图片描述

  • 正因为这样的区别,所以解释型语言开发效率高,但执行慢和无法加密代码

python版本

  • 在centos7上默认自带的python版本为2.7.5
[root@server1 ~]# python --version
Python 2.7.5
[root@server1 ~]# vim 1.py
[root@server1 ~]# cat 1.py
[root@server1 ~]# cat 1.py 
#!/usr/bin/python
#-*- coding:utf-8 -*-
print("hello world")
print("你好")

执行方法1
[root@server1 ~]# python 1.py 
hello world
你好

执行方法2
[root@server1 ~]# chmod 755 1.py 
[root@server1 ~]# ./1.py 
hello world
你好

在python2中,print "hello world"等同于print("hello world")

但在python3中,print "hello world"不允许使用

在python2中,如果想输出中文,需要指定字符格式#-*- coding: utf-8 -*-

  • python交互式使用
[root@server1 ~]# python
Python 2.7.5 (default, Nov 16 2020, 22:23:17) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print("hello linux")
hello linux
>>> 

相关软件安装

python3安装

[root@server1 ~]# yum install zlib-devel openssl openssl-devel gcc
[root@server1 ~]# yum install -y lrzsz
[root@server1 ~]# rz
[root@server1 ~]# tar xf Python-3.9.9.tar.xz -C /usr/local
[root@server1 ~]# cd /usr/local/Python-3.9.9/

[root@server1 Python-3.9.9]# ./configure --enable-optimizations
[root@server1 Python-3.9.9]# make
[root@server1 Python-3.9.9]# make install

[root@server1 ~]# ls /usr/bin/pip3.6 
/usr/bin/pip3.6
[root@server1 ~]# ls /usr/local/bin/python3.9
/usr/local/bin/python3.9

pycharm安装

  • PyCharm是一种Python IDE(Integrated Development Environment, 集成开发环境)。它带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制
  • 官网下载地址:http://www.jetbrains.com/pycharm/download/#section=linux
  • 专业版: 功能全,需要收费,但可以试用30天
  • 社区版: 免费版,学习基础够用了
[root@server1 ~]# rz

[root@server1 ~]# tar xf pycharm-professional-2021.2.3.tar.gz -C /usr/local/
[root@server1 ~]# mkdir /python_project_day1
[root@server1 ~]# nohup sh /usr/local/pycharm-2018.2.4/bin/pycharm.sh &

在这里插入图片描述

print函数使用

换行|不换行打印

  • Python程序由多个逻辑行构成,一个逻辑行不一定为一个物理行(人眼看到的行)

  • 换行打印hello world

help(print())	#帮助

print("hello")
print("world")	#直接打印

print("hello\nworld")	#换行打印

print('''hello
world''')	#三引号打印:物理行等同于逻辑行

print("hello",end='\n')
print("world")	#end='内容',上下两行连接:hello内容world
  • 不换行打印hello world
print('hello world')	#直接打印

print('''hello world''')	#三引号打印

print('hello', end=' ')
print('world')		#通过空格连接hello world

彩色打印

  • 使用VT100控制码实现彩色打印
print("\033[31;1;31m红色\033[0m")
print("\033[31;1;32m绿色\033[0m")
print("\033[31;1;33m黄色\033[0m")
print("\033[31;1;34m蓝色\033[0m")
print("\033[31;1;35m紫色\033[0m")
print("\033[31;1;36m青色\033[0m")

注释

在程序中对某些代码进行标注说明 ,增强程序的可读性

  • 单行注释
# print('hello world')
print('hello world')  # 说明
  • 多行注释:三引号
'''print('hello world')
print('hello world')'''

框选范围,使用ctrl+/可以批量注释

不选定范围,使用ctrl+/可以注释光标所在行

已注释的内容,再次使用ctrl+/可以解开注释

代码规范PEP

变量

变量创建

  • 命名规则:

    • 变量名只能是字母、数字或下划线的任意组合
    • 变量名的第一个字符不能是数字
    • 变量名要有见名知义的效果, 如UserName,user_name,驼峰命名法
    • 变量名区分大小写
    • 关键字不能声明为变量名[‘False’, ‘None’, ‘True’, ‘and’,‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘fifinally’, ‘for’, ‘from’, ‘global’, ‘if’,‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
    import keyword
    print(keyword.kwlist)	#导入模块,打印关键字列表
    
  • 变量的创建

a = 1
print(id(a))
a = 2
print(id(a))
b = 1
print(id(b))

#执行结果
1487831152
1487831184
1487831152

id()函数用于获取对象的内存地址

对于多个不可变类型的对象,值相同,id相同(说明它们指向同一个内存空间)

  • 变量值的交换
a, b = 1, 2
a, b = b, a
print(a,b)

#执行结果
2 1

变量的类型

  • python是强类型动态解释型语言
  • 强类型:不允许不同类型相加
  • 动态:不用声明数据类型,变量的数据类型由给定的值决定
name = 'zhangsan'
age = 20
height = 1.8
marry = True
print(type(name))
print(type(age))
print(type(height))
print(type(marry))

#执行结果
<class 'str'>	
<class 'int'>
<class 'float'>
<class 'bool'>

type()查看对象的类型

python数据类型

六大数据类型

  • 数字
  • int 整型(1, 2, -1, -2)
  • float 浮点型(34.678)
  • bool 布尔型(True/False)
  • complex 复数(4+3J, 不应用于常规编程,这种仅了解一下就好
  • 字符串:str 单引号和双引号内表示的内容为字符串 “hello world" “12345”
  • 列表:list 使用中括号表示 [1, 2, 3, 4]
  • 元组:tuple 使用小括号表示 (1, 2, 3, 4)
  • 字典:dict 使用大括号表示,存放key-value键值对 {“a”:1, “b”:2, “c”:3}
  • 集合:set 也使用大括号表示,但与字典有所不同 {1, 2, 3, 4}

类型转换

转换函数说明
int(xxx)将xxx转换为整数
float(xxx)将xxx转换为浮点型
str(xxx)将xxx转换为字符串
list(xxx)将xxx转换为列表
tuple(xxx)将xxx转换为元组
dict(xxx)将xxx转换为字典
set(xxx)将xxx转换为集合
chr(xxx)把整数[0-255]转成对应的ASCII码
ord(xxx)把ASCII码转成对应的整数[0-255]

输入输出

输入

  • 通过input输入的值的类型全为字符型
name = input("请输入你的名字:")
age = input("请输入你的年龄:")
print(name)
print(age)

#执行结果
请输入你的名字:lisi
请输入你的年龄:25
lisi
25

输出

普通输出
print("*"*10)

#执行结果
**********
格式化输出
  • 字符串拼接
name = input("请输入你的名字:")
age = input("请输入你的年龄:")
print(name+"的年龄为"+age)

#执行结果为
请输入你的名字:lisi
请输入你的年龄:23
lisi的年龄为23
  • 不同类型拼接
name = input("请输入你的名字:")
age = int(input("请输入你的年龄:"))
print("%s五年后的年龄为%d"%(name, age+5))

#执行结果
请输入你的名字:lisi
请输入你的年龄:23
lisi五年后的年龄为28
操作符说明
%s字符串
%d整数
%f浮点数
%%输出 %
  • 不考虑类型拼接
name = input("请输入你的名字:")
age = int(input("请输入你的年龄:"))
print("{}五年后的年龄为{}".format(name, age+5))

#执行结果
请输入你的名字:lisi
请输入你的年龄:23
lisi五年后的年龄为28
  • 结合索引
name = input("请输入你的名字:")
age = int(input("请输入你的年龄:"))
print("{0},五年后的{0}年龄为{1}".format(name, age+5))

#执行结果
请输入你的名字:lisi
请输入你的年龄:23
lisi,五年后的lisi年龄为28

运算符

算数运算符

算术运算符描述实例补充
+加法1+2=3
-减法5-1=4
*乘法3*5=15
/除法10/2=5
//整除10//3=3不能整除的只保留整数部分
**求幂2**3=8
%求余(取模)10%3=1得到除法的余数

赋值运算符

运算符描述实例
=简单的赋值运算符c=a+b将a+b的运算结果赋值为c
+=加法赋值运算符c+=a等效于c=c+a
-=减法赋值运算符c-=a等效于c=c-a
*=乘法赋值运算符c*=a等效于c=c*a
/=除法赋值运算符c/=a等效于c=c/a
%=取模赋值运算符c%=a等效于c=c%a
**=幂赋值运算符c**=a等效于c=c**a
//=取整除赋值运算符c//=a等效于c=c//a

比较运算符

运算符描述实例
==⽐较对象是否相等(a==b)返回False
!=⽐较两个对象是否不相等(a!=b)返回true
<>⽐较两个对象是否不相等(a<>b)返回true
>返回x是否⼤于y(a>b)返回False
<返回x是否⼩于y(a<b)返回true
>=返回x是否⼤于等于y(a>=b)返回False
<=返回x是否⼩于等于y(a<=b)返回true

逻辑运算符

逻辑运算符逻辑表达式描述
andx and yx与y都为True,则返回True;
x与y任一个或两个都为False,则返回False
orx or yx与y任一个条件为True,则返回True
notnot xx为True,返回False; x为False,返回True

在没有 () 的情况下 not 优先级⾼于 and,and 优先级⾼于 or,即优先级关系为**()>not>and>or**,同⼀优先级从左往右计算

成员运算符

成员运算符描述判定
inx 在 y 序列中如果 x 在 y 序列中返回 True; 反之,返回False
not inx 不在 y 序列中如果 x 不在 y 序列中返回 True; 反之,返回False

身份运算符

身份运算符描述补充
is引用自一个对象类似 id(x) == id(y)
is not引用自不同对象类似 id(a) != id(b)

运算符优先级

  • 算术 > 比较 > 逻辑 > 赋值

| ---------- | --------------- | ---------------------------------------------- |
| in | x 在 y 序列中 | 如果 x 在 y 序列中返回 True; 反之,返回False |
| not in | x 不在 y 序列中 | 如果 x 不在 y 序列中返回 True; 反之,返回False |

身份运算符

身份运算符描述补充
is引用自一个对象类似 id(x) == id(y)
is not引用自不同对象类似 id(a) != id(b)

运算符优先级

  • 算术 > 比较 > 逻辑 > 赋值
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐