本文已参与[新人创作礼]活动,一起开启掘金创作之路。
python基础语法学习,有兴趣学习python的童鞋可以一起参考一下,python作为一个脚本语言相较于java可以更快速实现功能。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 以上两行注释,第一行使得python代码在linux上可以直接运行;第二行表示代码的编码格式
print ("hello world")
#获取用户输入
name = input("please enter your name")
print("您刚才输入的是:",name)
#缩进语法 区分大小写,且缩进有误会报语法错误
a = 10
if a < 5:
print("太小了")
else:
print("太大了")
#数据类型:整形,浮点型,字符串,布尔值(可以用and,or,not运算符连接),空值(用None表示); 整数无大小限制,浮点数也没有大小限制,超出限制表示为无限大inf
#变量:动态类型变量;用小写字母表示变量,用大写字母表示常量
#ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符
ord("马")
#39532
chr(39532)
#'马'
#用整数编码表示字符串 '\u4e2d\u6587' ==> 中文
#字符串类型在内存中使用的是Unicode编码
#将字符串转为制定编码格式,包含中文的字符串不能使用 ascii 编码,会出现长度超出报错
"马江涛".encode('utf-8')
"ABC".encode('ascii')
#解码
"".decode("utf-8")
"".decode("ascii")
#如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节
"".decode("utf-8",errors='ignore')
#获取字符串长度
len("majt")
#字符串格式化输出 %d:替换整数; %s:替换字符串; %?:占位; %f:浮点数; %x:十六进制整数; (多个参数是用括弧括起来)
'majt你是 %s' % '帅哥!'
#list:有序集合,查找速度比较慢,占用内存比较小(用时间换空间)
list = [1,2]
list[1] = '3'
list.pop('3') list.pop(1)#删除一个元素
list.insert(0,'增加') #制定下表下插入一个元素
list.append('追加') #list末尾增加一个元素
len(list) #得到集合长度
#tuple 只读集合
#dict相当与map,键值对,查找速度极快,比较占用内存,key是不可变对象(用空间换时间)
dict = {'key1':99,'key2':100}
dict['key1']
dict['key1'] = 98
'key1' in dict #判断key是否存在
dict.get('key3') # 如果key不存在则返回None
dict.pop('key2') #删除一个元素
#set集合,不存储value,且不可重复的
s = set([1,2,3])
s.add(4)
#可以对集合求交集并集
s1 = set([1,2,3])
s2=set([2,3,4])
s1&s2 #交集
s1|s2 #并集
#https://docs.python.org/3/library/functions.html python内置函数
#可以在命令行使用help(abs) 查看帮助
#函数可以赋值给一个变量
a = abs
a(-1)
#切片使用,字符串也可以使用切片
list = [1,2,3,4,5,6,7]
list[1:3] #正向取1-3
list[:10] #正向取前十
list[-2:] #逆向取,符号表示方向即从倒数第二个取到最后
list[:10:2]
#判断是否可迭代
from collections import Iterable
isinstance('abc',Iterable)
#迭代list
for i,value in enumerate([1,2,3,4,5]):
print(i,value)
#列表生成
[x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[m + n for m in 'ABC' for n in 'XYZ'] #生成两层循环列表
[d for d in os.listdir('../')] #列出目录列表
#同时迭代dict列表的key和value
for k,v in d.items():
print(k,'=',v)
#过滤非字符串类型数据,迭代讲集合中的字符串转成小写
L1 = ['Hello', 'World', 18, 'Apple', None]
[x.lower() for x in L1 if isinstance(x,str)]
#列表生成器
g = (x*x for x in range(10)) #用此方法只生成,生成列表的函数,此方法较上个方法占用内存更小
next(g) #获取值,此处g是可迭代对象,可用for循环迭代
for gn in g:
print(gn)
#同时创建多个变量并同时赋值
a,b = 1,2 #等价于t = [1,2] a = t[0] b = t[1]
#结果
a=1 b=2
#判断一个对象的类型
type(123)
isinstance(s,str)
#判断一个的对象是否是函数
import types
def fn():
pass
type(fn)==types.FunctionType
type(abs)==types.BuiltinFunctionType
type(lambda x: x)==types.LambdaType
type((x for x in range(10)))==types.GeneratorType
#获取一个对象所有属性和方法
dir()
#给实例绑定方法,给一个实例绑定方法对另一个实例是不起作用的,绑定的方法只属于当前实例
from types import MethodType
def setAge(self,age):
self.age = age
dart = Student()
dart.setAge = MethodType(setAge,dart)
#给所有实例绑定方法,即给类绑定方法
def setScore(self,score):
self.score = score
Student.setScore = setScore
#__slots__ 来限制类对的属性,用tunlp给定值,此用法仅对当前类实例起作用,对子类不起作用;如果添加了未定义的属性则会报错
__slots__ = ('name','age') #用tunlp定义允许绑定的属性名
#@property 用于简化属性getter,setter访问器,直接作用于方法,即把方法变为属性调用(@property用的也是装饰器模式实现)
class Student2(object):
@property
def score(self):
return self._score
@score.setter
def score(self,value):
if not isinstance(value,int):
raise ValueError('value is not a int type')
if value <0 or value > 100:
raise ValueError('score must 0-100')
self._score = value
#MixIn 由于python支持多继承,此处引申出MixIn概念,可以用拓补排序去理解多继承,即先决条件决定执行顺序
#定制类,定制类初始化__init__和__str__
#__str__相当与java中的tostring方法,用于构造格式化输出
#当调用到不存在的属性是可以返回一个默认属性值
def __getattr__(self, attr):
if attr == 'score':
return 99
#异常处理,python的except不仅会捕获当前异常还会将其子类异常全部捕获,python的异常都是继承于BaseException
try:
foo()
except StandardError, e:
print 'StandardError'
except ValueError, e:
print 'ValueError'
finally:
print 'finally'
#启用python单步运行
#命令,l:查看代码,n:单步执行代码,p 变量名:查看变量,q:结束调试
python -m pdb err.py
#设置断点调试
#import pdb,然后,在可能出错的地方放一个pdb.set_trace()
#单元测试
#可来一次运行多个单元测试
python -m unittest mydict_test
#I/O
f.open('文件路径','r')
f.read()
f.close()
#用with语法实现io自动关闭
with