一、定义
Python是一种面向对象的解释型计算机程序设计语言,它常被昵称为胶水语言,能够把其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起.
面向对象:把构成问题的内容分解成多个对象,创建对象的目的不是为了完成一个步骤,而是描述某个事物在整个解决问题步骤中的行为.
面向过程:分析解决问题所有步骤并且使用函数将其一一实现.
解释型语言:代码逐行解释运行,在解释器中逐行解释给CPU运行.
编译型语言:编译成可执行文件运行,代码编译生成二进制文件.exe执行.
优点:
- 语法简单,免费开源.
- 可扩展性,丰富的第三方库.
- 平台可移植性,代码规范. 缺点:
- 运行速度较慢
- 分享项目只能开放源代码,代码不能加密
- 强制的缩进
- GIL全局解释器锁,不能真正意义上的多线程,多个线程会在解释器触发阻塞.
二、例子
1. 过滤除去英文字母外的字符
import re
with open(r'D:\Coder\【2】 xlsx&thon\1.txt','r') as f:
str = f.read()
# re.findall 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表.
# findall(pattern, string)
strfilter = re.findall('[a-z]|[A-Z]',str)
with open(r'D:\Coder\【2】 xlsx&thon\2.txt','w') as g:
g.write(''.join(strfilter))
open() 函数用于创建或打开指定文件,该函数的常用语法格式如下:
file = open('fileName'[,mode='r'])
| 模式 | 意义 | 注意事项 |
|---|---|---|
| r | 只读模式打开文件,读文件内容的指针会放在文件的开头. | 操作的文件必须存在. |
| rb | 以二进制格式,采用只读模式打开文件,读文件内容的指针位于文件的开头,一般用于非文本文件,如图片文件、音频文件等. | 操作的文件必须存在. |
| r+ | 打开文件后,既可以从头读取文件内容,也可以从开头向文件中写入新的内容,写入的新内容会覆盖文件中等长度的原有内容. | 操作的文件必须存在. |
| w | 以只写模式打开文件,该文件存在打开时会清空文件中原有的内容. | 若文件存在,会清空其原有内容(覆盖文件),反之,则创建新文件. |
| w+ | 打开文件后,会对原有内容进行清空,并对该文件有读写权限. | 若文件存在,会清空其原有内容(覆盖文件),反之,则创建新文件. |
| a | 以追加模式打开一个文件,对文件只有写入权限,如果文件已经存在,文件指针将放在文件的末尾.反之,则会创建新文件. | |
| a+ | 以读写模式打开文件,如果文件存在,文件指针放在文件的末尾,反之,则创建新文件. |
2. 装饰器
定义:可以在不修改原有代码的情况下,为被装饰对象增加新的功能.
首先定义一个函数:判断一个数是否为质数
def isPrimeNumber(num):
if num <= 1:
return False
else:
for i in range(2,num):
if num%i == 0:
return False
return True
然后输出1-1000内的质数:
def primeNumber():
for i in range(1,1000):
if isPrimeNumber(i):
print(i)
再不改变输出1-1000质数函数的情况下,记录程序运行时间,定义装饰器runtime并使用到primeNumber上:
import time
def runtime(func): # 装饰器的定义
def wrapper():
sta = time.time()
func() # 函数无参无返回值
end = time.time()
print('TIMECOST:%fS'%(end-sta))
return wrapper
def isPrimeNumber(num):
if num <= 1:
return False
else:
for i in range(2,num):
if num%i == 0:
return False
return True
@runtime # 装饰器的调用
def primeNumber():
for i in range(1,1000):
if isPrimeNumber(i):
print(i)
primeNumber()
函数primeNumber无参无返回值,如果函数有参有返回值,装饰器中需要接受参数,并把函数运行结果赋值在装饰器中返回.
import time
def runtime(func):
def wrapper(*args):
sta = time.time()
rlt = func(*args) # 函数有参有返回值
end = time.time()
print('TIMECOST:%fS'%(end-sta))
return rlt
return wrapper
def isPrimeNumber(num):
if num <= 1:
return False
else:
for i in range(2,num):
if num%i == 0:
return False
return True
@runtime # 装饰器的调用
def primeNumber(maxNum):
count = 0
for i in range(1,maxNum):
if isPrimeNumber(i):
count += 1
return count
print(primeNumber(10000))
使用场景:为函数新增功能,解决重复性操作,使得代码简洁不冗余模块化.
3. 对列表去重的方式
- 循环去重法
listV = list(map(int,input().split(',')))
# map(function, iterable, ...) python3.x返回一个迭代器,python2.x返回列表.
newlist = []
for x in listV:
if x not in newlist:
newlist.append(x)
print(newlist)
- set去重法
listV = list(map(int,input().split(',')))
newlist = list(set(listV))
newlist.sort(key=listV.index) # 解决输出结果无序问题.
# list.sort( key=None, reverse=False),该方法没有返回值,但是会对列表的对象进行排序.
# key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序.
print(newlist)
- 利用dict属性
listV = list(map(int,input().split(',')))
newdict = {}.fromkeys(listV)
# dict.fromkeys(seq[, value]),该方法返回一个新字典.
# seq -- 字典键值列表.
# value -- 可选参数,设置键序列(seq)的值.
newlist = list(newdict)
print(newlist)
4. 反转字符串的方式
- 切片
str = 'abc'
strver = str[::-1] # 切片[start:end]左闭右开
# str[start:end:step],切片的返回结果类型和切片对象一致,返回的是切片对象的子序列.
# start:起始索引 end:结束索引 step:步长 step的正负决定了切片结果的元素采集的先后.
print(strver)
- 列表的reverse()方法
str = 'abcd'
lstr = list(str)
lstr.reverse()
# list.reverse(),该方法没有返回值,会对列表的元素进行反向排序.
print(''.join(ls))
- 列表推导式
str = 'abcd'
strver = ''.join([str[-x] for x in range(1,len(str)+1)])
print(strver)
5.统计字符串个数并按照数字个数从大到小排序
str = input('请输入字符:')
# 存放字符+个数
dt = {}
# 遍历字符串统计个数
for x in str:
if x not in dt.keys():
dt[x] = 1
else:
dt[x] += 1
# 遍历字符串统计个数
for x in str:
dt[x] = dt.get(x,0)+1
dtSorted = sorted(dt.items(),key = lambda x:x[1],reverse=True)
print(dtSorted)
6. 打印直角三角形
- while循环
7. 二分查找
def binarySearch(nums, target):