Python函数Day6
一、内置函数
list() 将一个可迭代对象转化为列表
字典转为列表:会将所有键转化为列表
字符串转为列表:键每个字符转化为列表
s = 'abc'
dic = {'a':1,'b':2,'c':3}
print(list(s)) # 字符串的字符逐个转为列表
print(list(dic)) # 将字典的键转为列表 # 结果
['a', 'b', 'c']
['a', 'b', 'c']
tuple() 将一个可迭代对象转化为元组
字典转为元组:会将所有键转化为元组
字符串转为元组:键每个字符转化为元组
s = 'abc'
dic = {'a':1,'b':2,'c':3}
print(tuple(s)) # 字符串的字符逐个转为元组
print(tuple(dic)) # 将字典的键转为列表 # 结果
('a', 'b', 'c')
('a', 'b', 'c')
slice() 实现切片对象
制作了切片的规则,方便其他的切片可以调用
调用方法跟切片相似,列表[切片对象]
li = [i for i in range(1,11)]
section = slice(0,9,2)
print(li[section]) # 结果
[1, 3, 5, 7, 9]
str() 将数据类型转化为字符串
s = str(123456789)
print(s,type(s)) # 结果
123456789 <class 'str'>
可以将bytes类型的字符转为str,需要加编码encoding
s = str(b'\xe4\xbd\xa0\xe5\xa5\xbd',encoding='utf-8')
print(s) # 结果
你好
format() 与数据相关,一般用于科学计算
print(format('右对齐','>20')) # 第一参数是任何类型,第二参数>右对齐和字符串的长度
print(format('左对齐','<20')) # 第一参数是任何类型,第二参数<左对齐和字符串的长度
print(format('居中','^20')) # 第一参数是任何类型,第二参数^居中和字符串的长度 # 结果
右对齐
左对齐
居中
print(format(99,'b')) # 第一参数转化为二进制
print(format(99,'d')) # 第一参数转化为十进制
print(format(99,'o')) # 第一参数转化为八进制
print(format(99,'x')) # 第一参数转化为十六进制,小写字母表示
print(format(99,'X')) # 第一参数转化为十六进制,大写字母表示
print(format(99,'n')) # 第一参数转化为十进制
print(format(99,'c')) # 第一参数转化为unicode字符
print(format('')) # 默认 # 结果
1100011
99
143
63
63
99
c
123
bytes() 将unicode转化为bytes类型
格式:bytes(字符串,encoding=编码)
s = '哈哈哈'
b = bytes(s,encoding='utf-8')
print(b) # 结果
b'\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88'
将整型转化为bytes类型(不能加encoding)
b = bytes(10)
print(b,type(b)) # 结果
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' <class 'bytes'>
将可迭代对象转化为bytes类型(不能加encoding)
b = bytes([1,2,3])
print(b,type(b)) # 结果
b'\x01\x02\x03' <class 'bytes'>
bytearray() 返回一个新字节数组
可以将字符串转化为unicode码,通过切片或者索引替换值,改变原来的值,id不变
ret1 = bytearray('你好',encoding='utf-8')
print(id(ret1)) #
print(ret1) # bytearray(b'\xe4\xbd\xa0\xe5\xa5\xbd')
print(ret1[:3]) # bytearray(b'\xe4\xbd\xa0')
ret1[:3] = b'\xe6\x82\xa8' # 通过切片替换值
print(ret1) # bytearray(b'\xe6\x82\xa8\xe5\xa5\xbd')
print(id(ret1)) #
memoryview() 函数返回给定参数的内存查看对象(Momory view)。
所谓内存查看对象,是指对支持缓冲区协议的数据进行包装,在不需要复制对象基础上允许Python代码访问。
v = memoryview(bytearray('abc',encoding='utf-8'))
print(v[0]) #
print(v[-1]) #
ret2 = memoryview(bytes('你好',encoding='utf-8'))
print(id(ret2)) #
print(ret2) # <memory at 0x0000019657A51048>
print(bytes(ret2).decode('utf-8')) # 你好
ord() 输入字符找该字符编码的位置,unicode的字符编码或者ascii的字符编码
print(ord('好')) #
chr() 输入位置数字找出对应的字符,unicode的字符编码或者ascii的字符编码,跟ord相反
print(chr(22909)) # 好
ascii 函数类似 repr() 函数, 返回一个表示对象的字符串, 但是对于字符串中的非 ASCII 字符则返回通过 repr() 函数使用 \x, \u 或 \U 编码的字符
print(ascii('a')) # 'a'
print(ascii('好')) # '\u597d'
repr() 返回一个对象的string形式
dic = {'baidu':'baidu.com','google':'google.com'}
print(repr(dic),type(repr(dic))) # {'baidu': 'baidu.com', 'google': 'google.com'} <class 'str'> s = 'google'
print(repr(s)) # 'google'
用途:① 研究json pickle序列化模块,特殊字符串与python字符串的区别
② 格式化输出 %r
print("I'll do a %r search" % ('Google')) # 结果
I'll do a 'Google' search
dict() 创建一个字典
dic = dict(zip(['a','b','c'],[1,2,3]))
# {'a': 1, 'b': 2, 'c': 3}
set() 创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等
frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
li = frozenset([1,2,3,4,5])
# frozenset({1, 2, 3, 4, 5})
len() 返回对象中元素的个数
print(len([i for i in range(10)]))
#
sorted() 对所有可迭代的对象进行排序操作
通过原对象排序后形成新的对象,对原对象无影响
默认按对象的元素的索引0的元素排序
dic = {'b':1,'c':3,'a':2}
print(sorted(dic)) # 结果
['a', 'b', 'c']
参数key可以添加函数来比较。
dic = {'b':1,'c':3,'a':2}
def func(x): # 字典的是传入键
return dic[x] # 返回键对应的值
print(sorted(dic,key=func,reverse=True)) # 通过函数的返回值来排序,reverse是倒序 # 结果
['c', 'a', 'b']
all() 可迭代对象里的元素全是True才返回True
any() 可迭代对象里的元素有一个True就返回True
li = [1,2,3,'',()]
print(all(li))
print(any(li)) # 结果
False
True
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
拉链方法:以长度最短的可迭代对象为主,写多个可迭代对象,将纵向组成一个个元组,按顺序排列;组合是一个迭代器。
li = [1,2,3,4,5]
tu = ('a','b','c')
dic = {'i':10,'k':20,'j':30}
print(zip(li,tu,dic)) # <zip object at 0x000002452FD4AFC8> 迭代器 for i in zip(li,tu,dic):
print(i) # 结果
(1, 'a', 'i')
(2, 'b', 'k')
(3, 'c', 'j')
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
类似于筛选模式下的列表推导式
格式:filter(function or None, iterable)
def func(x):return x % 2 == 1
l1 = [i for i in range(10)]
f1 = filter(func,l1)
print(f1) # <filter object at 0x0000026A61F47908> 迭代器
print(list(f1)) # [1, 3, 5, 7, 9] # 结果
<filter object at 0x0000026A61F47908>
[1, 3, 5, 7, 9]
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
类似于列表推导式的循环模式,根据提供的函数对指定序列做映射
def func(x):return pow(x,3)
li = [1,3,5,8,9]
l2 = map(func,li)
print(l2) # <map object at 0x0000022EE54A7A20> 迭代器
print(list(l2)) # [1, 27, 125, 512, 729] # 结果
<map object at 0x0000022EE54A7A20>
[1, 27, 125, 512, 729]
重点掌握:print、min、max、sum、map、sorted、reversed、filter、zip
有key的内置函数:min、max、map、sorted、filter、zip
二、匿名函数
lambda 表达式 就是匿名函数,一行函数
普通函数,有且只有返回值的函数才可以使用匿名函数进行简化,一行函数。
匿名函数一般不单独使用,多余内置函数配合使用。
格式:
func = lambda x:x*2
函数名 = lambda 参数 :返回值
func = lambda x : pow(x,3)
print(func(2)) #
匿名函数的返回值可以放三元运算
func = lambda x : x > 13 and x or x**2
print(func(10)) #
三、递归函数
函数的自我调用,就称为递归函数。
递归能解决的函数也能解决,而且递归算法解题的运行效率较低。
使用递归函数一定要用 return
# 求 8!
def func(x):
if x == 1:
return x
return x * func(x-1)
print(func(8))
python默认递归深度有限制的,默认998次,以免消耗尽内存
def func(x):
print(x)
x += 1
return func(x)
func(1) # 结果
1
2
...
...
...
996
997
998
Traceback (most recent call last):
File "D:/Day14/review.py", line 256, in <module>
func(1)
File "D:/Day14/review.py", line 255, in func
return func(x)
File "D:/Day14/review.py", line 255, in func
return func(x)
File "D:/Day14/review.py", line 255, in func
return func(x)
[Previous line repeated 993 more times]
File "D:/Day14/review.py", line 253, in func
print(x)
RecursionError: maximum recursion depth exceeded while calling a Python object
可以对深度进行修改,导入sys模块
import sys
sys.setrecursionlimit(100000)
def func(x):
print(x)
x += 1
return func(x)
func(1) # 结果
1
2
3
...
...
...
3219
3220
3221
Python函数Day6的更多相关文章
- python笔记 - day6
python笔记 - day6 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 大纲: 利用递归,实现阶乘: Python反射 pyt ...
- python 函数之day3
一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...
- Python函数作用域的查找顺序
函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...
- Python函数讲解
Python函数
- Python函数信息
Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...
- Python函数参数默认值的陷阱和原理深究"
本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...
- Python开发【第四章】:Python函数剖析
一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...
- Python函数解析
对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...
- Python入门笔记(18):Python函数(1):基础部分
一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...
随机推荐
- python中多层循环的一键退出
在单层循环的退出中,使用break即能退出,那么多层循环呢?机智的人们使用flag标识符的方式,例如: a=['a',1,2,3,4] b=['b',1,2,3,4] c=['c',1,2,3,4] ...
- 机器学习中的数学-线性判别分析(LDA)
前言在之前的一篇博客机器学习中的数学(7)——PCA的数学原理中深入讲解了,PCA的数学原理.谈到PCA就不得不谈LDA,他们就像是一对孪生兄弟,总是被人们放在一起学习,比较.这这篇博客中我们就来谈谈 ...
- windows7 + iis7 + fastcgi + php5 + netbeans + xdebug 调试 php
Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. windows7 + iis7 + fastcgi + php5 + netbe ...
- 025 Android 带进度条的对话框(ProgressDialog)
1.ProgressDialog介绍 ProgressDialog可以在当前界面弹出一个置顶于所有界面元素的对话框,同样具有屏蔽其他控件的交互能力,用于提示用户当前操作正在运行,让用户等待: 2.应用 ...
- ZooKeeper 相关问题
[为什么部署个数是奇数个?] zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的.即 2n 个机器的集群,最多可以容忍 n-1 个机器不可用,这个容忍度与 ...
- URI和URL的关系与区别
首先给大家举个例子,有一家公司的总经理,某天,给了我一张名片,上面写了他的头衔,北京XXX公司总经理 张三,还有他的办公室地址,北京市海淀区长安街35号北京XXX公司总经理办公室,那么,我以后给我的朋 ...
- Java基础---Java 数组
数组概念: 数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致. 数组的定义 格式:数组定义格式详解: 数组存储的数据类型: 创建的数组容器可以存储什么数据类型. [] : 表示数组. 数组 ...
- Zuul【基础配置】
概述:zuul底层是基于servlet,是由一系列的filter链构成. 1.路由配置 a.单例serverId映射 zuul: routes: client-a: path: /client/** ...
- 十分钟快速入门 Python,看完即会,不用收藏!
本文以 Eric Matthes 的<Python编程:从入门到实践>为基础,以有一定其他语言经验的程序员视角,对书中内容提炼总结,化繁为简,将这本书的精髓融合成一篇10分钟能读完的文章. ...
- hdu 2167 题解
题目 题意 一个数字正方形(所有数都是两位的正整数),取了一个数后,它的周围 $ 8 $ 个数都不能被选,问最大取数总和. 注意数据范围 $ 3=< n <=15 $ 我们可能一开始会去想 ...