python学习

1.高阶函数

map和reduce链接

1.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。

def fun(x)
    return x*x

a=[1,2,3,4]
r=map(fun,a)  # 返回[1,4,9,16]

2.reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
from functools import reduce
def fn(x,y)
    return x*10+y

reduce(fn,[1,3,5])   #返回135,实现了序列到整数的转化

3.和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。 filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。

def is_odd(n)
    return n%2==1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

2.字符串有关

菜鸟教程链接

string.upper  #小写变大写
string.lower  #大写变小写
string.join   #字符串拼接
string.split  #字符串分割

str.split(str="", num=string.count(str)).  #str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等;
                                           #num -- 分割次数。默认为 -1, 即分隔所有

3.其他函数

1.sorted()

sorted([36, 5, -12, 9, -21])
sorted([36, 5, -12, 9, -21], key=abs)

4.闭包

在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。

返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变

def lazy_sum(*args):
    def sum():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sum

5.装饰器

前言:当你把一对小括号放在后面,这个函数就会执行;然而如果你不放括号在它后面,那它可以被到处传递,并且可以赋值给别的变量而不去执行它。 在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)

python输出

print输出

print(1)  #数值类型可以直接输出
 
'''
运行结果如下
1
'''
 
print("Hello World")  #字符串类型可以直接输出
 
'''
运行结果如下:
Hello World
'''
 
a=1
b="Hello World"
print(a, b)  #可以一次输出多个对象,对象之间用逗号分隔
'''
运行结果如下:
1 Hello World
'''
 
#如果直接输出字符串,而不是用对象表示的话,可以不使用逗号
print("Duan""Yixuan")
print("Duan","Yixuan")
 
'''
运行结果如下:
DuanYixuan
Duan Yixuan
可知,不添加逗号分隔符,字符串之间没有间隔
'''
 
print("www", "snh48", "com", sep=".")  # 设置间隔符
'''
运行结果如下:
www.snh48.com
'''

变量的输出 无论什么类型的数据,包括但不局限于:数值型,布尔型,列表变量,字典变量...都可以直接输出。

 
#例如:
 
num = 19
print(num)    #19  输出数值型变量
 
str = 'Duan Yixuan'
print(str)  #Duan Yixuan  输出字符串变量
 
list = [1,2,'a']
print(list)   #[1, 2, 'a']  输出列表变量
 
tuple = (1,2,'a')
print(tuple)    #(1, 2, 'a') 输出元组变量
 
dict = {'a':1, 'b':2}
print(dict)   # {'a': 1, 'b': 2} 输出字典变量

格式化输出

s='Duan Yixuan'
x=len(s)
print('The length of %s is %d' %(s,x))
 
'''
'The length of %s is %d' 这部分叫做:格式控制符
(s,x) 这部分叫做:转换说明符
% 字符,表示标记转换说明符的开始
输出如下:
The length of Duan Yixuan is 11
'''
PI = 3.141592653
print('%10.3f'%PI)  #字段宽10,精度3
#     3.142
 
#精度为3,所以只显示142,指定宽度为10,所以在左边需要补充5个空格,以达到10位的宽度
PI=3.1415926
print("PI=%.*f"%(3,PI))
#用*从后面的元组中读取字段宽度或精度,可以读取出来精度是3位
#PI=3.142 
 
#没有指定宽度,所以不需要缩进
 
print("PI=%*.3f"%(10,PI))   #精度为3,总长为10.
# PI=     3.142
 
#* 所处的位置不同,读取的内容也不同

转换标志:-表示左对齐;+表示在数值前要加上正负号;" "(空白字符)表示正数之前保留空格();0表示转换值若位数不够则用0填充。

PI=3.1415926
print('%-10.3f' %PI)  #左对齐,还是10个字符,但空格显示在右边。
#3.142

PI=3.1415926
print('%+f' % PI)  #显示正负号  #+3.141593
# 类型f的默认精度为6位小数。

PI=3.1415926
print('%010.3f'%PI) #字段宽度为10,精度为3,不足处用0填充空白
#000003.142   0表示转换值若位数不够则用0填充

换行

for x in range(0, 5):
    print(x, end=' ')
#0 1 2 3 4 

for x in range(0, 5):
    print(x, end=',')
#0,1,2,3,4,
    print(x, end=' ')
 
print('\n')  
 
for x in range(0, 5):
    print(x, end=',')
 
'''
0 1 2 3 4 #出现上面这种情况,是因为print()本身就是默认换行的,再加上换行符,相当于换行两次。

0,1,2,3,4,
'''

相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’

format输出

(1)不带编号,即“{}”

(2)带数字编号,可调换顺序,即“{1}”、“{2}”

(3)带关键字,即“{a}”、“{tom}”

print('{} {}'.format('hello','world'))  # 不带字段
hello world
print('{0} {1}'.format('hello','world'))  # 带数字编号
hello world
print('{0} {1} {0}'.format('hello','world'))  # 打乱顺序
hello world hello
print('{1} {1} {0}'.format('hello','world'))
world world hello
print('{a} {tom} {a}'.format(tom='hello',a='world'))  # 带关键字
world hello world

'{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
'{}, {}, {}'.format('a', 'b', 'c')  # 3.1+版本支持
'a, b, c'
'{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
'{2}, {1}, {0}'.format(*'abc')  # 可打乱顺序
'c, b, a'
'{0}{1}{0}'.format('abra', 'cad')  # 可重复
'abracadabra'
 
通过位置匹配
# 格式转换
print('{0:b}'.format(3))
11
print('{:c}'.format(20))
 
print('{:d}'.format(20))
20
print('{:o}'.format(20))
24
print('{:x}'.format(20))
14
print('{:e}'.format(20))
2.000000e+01
print('{:g}'.format(20.1))
20.1
print('{:f}'.format(20))
20.000000
print('{:n}'.format(20))
20
print('{:%}'.format(20))
2000.000000%

# 时间转换等等
import datetime
d = datetime.datetime(2010, 7, 4, 12, 15, 58)
'{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'

6.字符串函数

1.split()函数

str1 = "Hello world, My name is 王怕怕升职'"
str2 = str1.split() # 以空格为分隔符,全部分隔
str3 = str1.split(" ", 3) # 以空格为分隔符,分为4份
print(str2)
print(str3)
 
print("---------------------------------")
 
# 利用re模块分割含有多种分割符的字符串:
import re
a='Beautiful, is; better + than - ugly'
x= re.split(',|; | \+ | - ',a)
print(x)
 
print("---------------------------------")
 
# 分隔后的字符串赋予变量
user, emall = ('123@qq.com').split('@')
print('user是:%s, emall是:%s' % (user, emall))
 
print("---------------------------------")
 
# 网页地址解析:
str="http://www.runoob.com/python/att-string-split.html"
print("0:%s"%str.split("/")[-1]) # 分割后的最后1条数据
print("1:%s"%str.split("/")[-2]) # 分割后的倒数第2条数据
print("2:%s"%str.split("/")[-3]) # 分割后的倒数第3条数据
print("5:%s"%str.split("/",-1)) # 默认-1,即分割所有
print("6:%s"%str.split("/",0))  # 分隔1条,即不分割
print("7:%s"%str.split("/",1))  # 分隔2条

python将列表元素转化为字符串

``colors = ['red', 'blue', 'yellow'] str1 = ",".join(colors) str1

'red,blue,yellow'`

#join 只接受 str 类型参数 colors = ['red', 'blue', 'yellow', 12, 3.14] str1 = ",".join(colors)

Traceback (most recent call last): File "", line 1, in TypeError: sequence item 3: expected str instance, int found

字符串转列表
str1 = "hi hello world"
print(str1.split(" "))
 
['hi', 'hello', 'world']
#### 7.程序异常处理
[try...except](https://blog.csdn.net/m0_37822685/article/details/80259402?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7.pc_relevant_aa&utm_relevant_index=11)



全部评论

相关推荐

牛客963010790号:一般是hr拿着老板账号在招人不是真是老板招
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务