程序猿是一种非常特殊的、可以从事程序开发、维护的动物。一般分为程序设计猿和程序编码猿,但两者的界限并不非常清楚,都可以进行开发、维护工作。^_^!
啥也不是,python都不会,先学会再说!先学点专业术语(行业黑话)菜鸟教程 - 学的不仅是技术,更是梦想!
#!/usr/bin/env python3 会去环境设置寻找 python3 目录,指定解释器路径,这里说的解释器指的是python。
#!/usr/bin/python3
print("Hello, World!")
Python 3.0 版本,常被称为 Python 3000,或简称 Py3k。
环境变量配置
程序所在的目录可能不在默认搜索路径中,path(路径)储存在环境变量中。
Unix 或 Windows 中路径变量为 PATH(UNIX 区分大小写,Windows 不区分大小写)。
export PATH="$PATH:/usr/local/bin/python"
以下为 Python 命令行参数:
选项 | 描述 |
---|---|
-d | 在解析时显示调试信息 |
-O | 生成优化代码 ( .pyo 文件 ) |
-S | 启动时不引入查找Python路径的位置 |
-V | 输出Python版本号 |
-X | 从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时。 |
-c cmd | 执行 Python 脚本,并将运行结果作为 cmd 字符串。 |
file | 在给定的python文件执行python脚本。 |
标识符:字母或_开头,字母数字_组成,区分大小写
关键字(保留字、keyword):不能把它们用作任何标识符名称,例如None、True
注释:# 多行注释可以用多个 # 号,还有 ''' 和 """
# 第一个注释
# 第二个注释
'''
第三注释
第四注释
'''
"""
第五注释
第六注释
"""
缩进:python用缩进代表代码块,c用{}
多行语句作为一个整体:分行写每行行末用\;在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \;把多行语句写在一行,用分号隔开就行。
Python 中单引号 ' 和双引号 " 使用完全相同。
字符串连接:可以用 + 运算符连接在一起, * 2表示重复2次。
字符串索引:从左往右以 0 开始,从右往左以 -1 开始。
字符串的截取:变量[头下标:尾下标:步长]
str='123456789'
print(str) # 输出字符串
print(str[0:-1]) # 从左到右索引,输出第一个到倒数第一个的所有字符
print(str[-1:0]) # 从右到左索引,输出倒数第一个到第一个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第六个的字符(不包含)
print(str[2:]) # 输出从第三个开始后的所有字符
print(str[1:5:2]) # 输出从第二个开始到第五个且每隔一个的字符(步长为2)
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
r 指 raw,即 raw string,会自动将反斜杠转义,r"\n"就是\n不代表换行的意思
空行:分隔新代码段或者类
输出显示在一行:加上end=" "
print( x, end=" " )
print( y, end=" " )
print()
关于import小结:
在 python 用 import 或者 from...import 来导入相应的模块。
将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *
将模块换个别名,例如:import somemodule as abc
调用 python 的 help() 函数可以打印输出一个函数的文档字符串:
# 如下实例,查看 max 内置函数的参数列表和规范的文档 >>> help(max) ……显示帮助信息……
按下 : q 两个按键即退出说明文档
在终端中进入python环境用python命令,退出用quit()。
在 Python 中,集合使用大括号 {} 表示,元素之间用逗号 , 分隔。
另外,也可以使用 set() 函数创建集合。
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
int(x,base)
若 x 为纯数字,则不能有 base 参数,否则报错;其作用为对入参 x 取整若 x 为 str,则 base 可略可有。
base 存在时,视 x 为 base 类型数字,并将其转换为 10 进制数字。
若 x 不符合 base 规则,则报错。
>>>int("1001",2) 9 # "1001"才是2进制格式,并转化为十进制数字9
字典当中的元素是通过键(key) : 值(value) 的集合来存取的,而列表通过偏移存取。字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:d = {key1 : value1, key2 : value2 }
4 | dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 |
注意:dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict。
#!/usr/bin/python3
dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2] = "2 - 菜鸟工具"
tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
print (dict['one']) # 输出键为 'one' 的值
print (dict[2]) # 输出键为 2 的值
print (tinydict) # 输出完整的字典
print (tinydict.keys()) # 输出所有键
print (tinydict.values()) # 输出所有值
输出结果
1 - 菜鸟教程
2 - 菜鸟工具
{'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
dict_keys(['name', 'code', 'site'])
dict_values(['runoob', 1, 'www.runoob.com'])
增加列表元素 list.append('Google') ## 使用 append() 添加元素
删除列表元素 del list1[2] #删除列表list1中的第二个元素
对变量赋值就等同于声明和创建了这个变量,多变量赋值用逗号隔开。删除用del
给变量赋值,或者说让变量指向这个对象。
counter = 100
a, b, c = 1, 2, "runoob"
一个变量可以通过赋值指向不同类型的对象。意思是a = 1, a = "hello" a这个变量指向了int和str
与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如 word = 'Python' word[0] = 'm' 会导致错误。
isinstance 和 type 的区别在于:
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
>>> a = 111
>>> isinstance(a, int)
True
>>>
/ // % **
除 整除 取余 乘方
在混合计算时,Python会把整型转换成为浮点数。浮点数float就是小数的意思。complex复数,可以用 a + bj,或者 complex(a,b) 表示。
\:Python 使用反斜杠 \ 转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r
>>> print('Ru\noob')
Ru
oob
>>> print(r'Ru\noob')
Ru\noob
>>>
函数 | 描述 |
---|---|
choice(seq) | 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。 |
randrange ([start,] stop [,step]) | 从指定范围[start,] stop内,按指定基数递增的集合中获取一个随机数,递增基数step默认值为 1 |
random() | 随机生成下一个实数,它在[0,1)范围内。 |
seed([x]) | 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。 |
shuffle(lst) | 将序列的所有元素随机排序 |
uniform(x, y) | 随机生成下一个实数,它在[x,y]范围内。 |
结束函数,将一个值暂时储存或者说返回一个值。不带return相当于返回 None。
调用printme()函数,必须传入一个参数,
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 定义函数
def printme( str ): #def 函数名(参数)
"打印任何传入的字符串"
print str
return
# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")
#!/usr/bin/python
# -*- coding: UTF-8 -*-
total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
#返回2个参数的和."
total = arg1 + arg2 # total在这里是局部变量.
print "函数内是局部变量 : ", total
return total
#调用sum函数
sum( 10, 20 )
print "函数外是全局变量 : ", total
if...else... 多条件用if...elif...else...或用and、or连接条件,优先级><先判断大小再判断and、or
num = 5
if num == 3: # 判断num的值
print 'boss'
elif num == 2:
print 'user'
else:
print 'roadman' # 条件均不成立时输出
num = 9
if num >= 0 and num <= 10: # 判断值是否在0~10之间
print 'hello'
Python 提供了 for 循环和 while 循环(在 Python 中没有 do..while 循环):
控制语句 | 描述 |
---|---|
break 语句 | 在语句块执行过程中终止循环,并且跳出整个循环 break单独成行即可 |
continue 语句 | 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。 |
pass 语句 | pass是空语句,是为了保持程序结构的完整性。 |
while 循环:条件为真就继续
判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。
当判断条件假 false 时,循环结束。
如果条件判断语句永远为 true,无限循环,可以使用 CTRL+C 来中断循环。
pass 占据一个位置,因为如果定义一个空函数程序会报错,当你没有想好函数的内容是可以用 pass 填充,使程序可以正常运行。
Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
[表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list] 或者 [表达式 for 变量 in 列表 if 条件] [out_exp_res for out_exp in input_list if condition]
表达式指的是命令的意思,看数据处理的目的
第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数,默认用self,也可以用别的不是关键字的词表示。self 代表的是类的实例,代表当前对象的地址,而 self.__class__ 则指向类,有点像目录。
当你创建一个对象并给它赋一个变量的时候,变量名只是指向计算机中存储那个对象的内存。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Employee: # 创建一个类
empCount = 0 '''empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。'''
def _init_(self, name, salary): #构造函数/初始化
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary #输出的是self.name,上面写的把name的值赋值给self.name,
"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount
输出
Name : Zara ,Salary: 2000
Name : Manni ,Salary: 5000
Total Employee 2
class Test:
def prt(self):
print(self)
print(self.__class__)
t = Test()
t.prt()
结果
<__main__.Test instance at 0x10d066878>
__main__.Test
attribute 属性缩写attr:has、get、set、del
hasattr(emp1, 'age') # 判断是否存在这个属性,如果存在 'age' 属性返回 True。
getattr(emp1, 'age') # 返回 'age' 属性的值
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8
delattr(emp1, 'age') # 删除属性 'age'
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Employee:
'所有员工的基类'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary
"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount
代码的重用,实现这种重用的方法之一是通过继承机制
通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
继承语法
class 派生类名(基类名)
可以使用issubclass()或者isinstance()方法来检测。
__cmp__ ( self, x ) 对象比较 简单的调用方法 : cmp(obj, x) |
AttributeError: JustCounter instance has no attribute '__secretCount'
# 报错,实例不能访问私有变量
Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性,参考以下实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Runoob:
__site = "www.runoob.com" # 双下划线是私有变量,不能直接访问
runoob = Runoob()
print runoob._Runoob__site # 直接输出__site会报错 格式object._className__attrName( 对象名._类名__私有属性名 )
输出www.runoob.com
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。