# 二分查找 示例
data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, 66]def binary_search(dataset, find_num):print(dataset)if len(dataset) > 1:mid = int(len(dataset) / 2)if dataset[mid] == find_num:  # find itprint("找到数字", dataset[mid])elif dataset[mid] > find_num:  # 找的数在mid左面print("\033[31;1m找的数在mid[%s]左面\033[0m" % dataset[mid])return binary_search(dataset[0:mid], find_num)else:  # 找的数在mid右面print("\033[32;1m找的数在mid[%s]右面\033[0m" % dataset[mid])return binary_search(dataset[mid + 1:], find_num)else:if dataset[0] == find_num:  # find itprint("找到数字啦", dataset[0])else:print("没的分了,要找的数字[%s]不在列表里" % find_num)binary_search(data, 66)

关于匿名函数 lambda

#!/usr/bin/env python
# coding:utf-8# 这段代码
# def calc(n):
#     return n ** n
#
#
# print(calc(10))# 换成匿名函数
calc = lambda n: n ** n
print(calc(3))######
# 匿名函数通常用简单逻辑,与其它函数配合使用
lambda x, y, z: (x + 1, y + 1, z + 1)### 编程的方法论:
# 面向过程
# 函数式
# 面向对象
def foo(name):print(name)def bar(name):print("my name is %s" % name)print(foo(bar('aa')))
print('----------------')lis = [333,222,111,11,22,33,44,55,66,888]
print(max(lis))dic = {'k1': 10, 'k2': 100, 'k3': 30}# print("用max来求dic的最大值:",max(dic.values()))
print("用max来求dic的最大key值:", max(dic))
print(dic[max(dic, key=lambda k: dic[k])])
print('===========')

### 使用map 和匿名函数 求平方
res = map(lambda x: x ** 2, [1, 5, 7, 4, 8])for i in res:print(i)print(res, type(res))##
listx = [1, 2, 3, 4, 5, 6, 7]  # 7 个元素
listy = [2, 3, 4, 5, 6, 7]  # 6 个元素
listz = [100, 100, 100, 100]  # 4 个元素
list_result = map(lambda x, y, z: x ** 2 + y + z, listx, listy, listz)
print(list(list_result))# 由于 lambda 中的 z 参数,实际是使用了 listz, 而 listz 里面只有 4 个元素,
#  所以,只执行了 4 个元素的的计算。

学了好几节的东西,放在一起了。

## 高阶函数: 1.函数接收的参数是一个函数名; 2.返回值中包含函数
# 把函数当作参数传递给另外一个函数
# def foo(n):
#     print(n)
#
# def bar(name):
#     print("My name is %s" % name)
#
# foo(bar)
# foo(bar('alex'))def bar():print("from bar")def foo():print("from foo")return barfoo()()def handle():print("from handle...")return handleh = handle()
h()def test1():print("from test1")def test2():print('from test2')return test1()test2()### 尾调用: 在函数的最后一步调用另外一个函数(不一定是最后一行。)
## 优化:把递归放在最后一步。

map  / reduce  / filter  跟大数据沾点边

#### map函数,第一个参数是方法,第二个参数是迭代器(可迭代对象)
## python2中,map的结果直接是列表msg = 'abcdefg'
print(list(map(lambda x: x.upper(), msg)))  # 简洁,但可读性很差。lis = (11, 22, 33, 44, 55, 66,)def abc(x):return x // 2 + 1res = map(abc,lis) #也可以传一个自定义的函数
for i in res:print(i)

print(list(map(str,lis))) # 将列表值转为字符串

#!/usr/bin/env python
# coding:utf-8## python2中可直接用。但是3中需要导入模块。
from functools import  reducelis = [3,4,5,7,32,22,11]
print(reduce(lambda x,y:x+y,lis))# 用来合并一个序列
# 带有初始值的 reduce
print(reduce(lambda x,y:x+y, lis, 100))

#!/usr/bin/env python
# coding:utf-8### filter函数 用来过滤迭代器,得到过滤出的对象lis = ['alex_sb', 'abc_tom', 'dadasb', 'jerry', 'hhui_sb']# 不保留 sb 结尾的元素
res = list(filter(lambda x: not x.endswith('sb'), lis))
print(res)## 保留以 a 开头的元素
print(list(filter(lambda y:y.startswith('a'),lis)))# filter 练习: 过滤出小于33岁的。
dic = [{'name':'alex', 'age':99},{'name':'wpq', 'age':66},{'name':'bigs', 'age':44},{'name':'tom', 'age':22},{'name':'jerry', 'age':33},
]print(list(filter(lambda n: n['age']<=33, dic)))

python中常用的一些内置函数,更详细的内置函数,可参考:http://www.runoob.com/python/python-built-in-functions.html

#!/usr/bin/env python
# coding:utf-8print(abs(-3)) # 求绝对值# 所有元素是否不为 0、''、False ,三样都没有,则返回True
# 空列表、元组、字典都为True
print(all(''))
print(all([]))
print(all(()))
print(all({}))
print(all(['2','1',''])) # 返回false
print(all([2,1,0])) # 返回false# 与all不同,如果有一个非0,非空,非false,则返回True
print(any(['2',''])) # 任何一个为真即返回Trueprint(bin(9)) # 转为二进制
print(hex(9)) # 转为16进制
print(oct(9)) # 转为8进制print(bool(''))name='你好'
## 转码为字节
print(bytes(name,encoding='utf-8'))
print(bytes(name,encoding='utf-8').decode('utf-8'))print(bytes(name,encoding='gbk'))
print(bytes(name,encoding='gbk').decode('gbk'))print(chr(46)) # 转为ascii码print(divmod(10,3)) # 10除3, 取出商和余str_dic="{'name':'alex'}"
print(str_dic)
dic = eval(str_dic)  # 识别字符串中的字典
print(dic['name'])str2= '1+3+5*2'
print(str2)
print(eval(str2))  # 识别字符串中的表达式,并得出结果## 可hash的数据类型即不可变数据类型。 不可hash的即可变类型
## 应用: 检验软件下载的hash
## 不能通过hash值反推原始值 。name ='alex'
print(hash(name))
print(hash(name))
name = 'sb'
print(hash(name))print(dir(hash))
print(help(hash))print(globals()) ## 输出全局变量
print(__file__)  ##当前文件路径def test():age=19print(globals())print('----------------------')print(locals()) ##输出当前作用域的变量test()

有一个max的小练习:

#!/usr/bin/env python
# coding:utf-8dic = {'k11':3000,'k6':5000,'k3':6000,'k4':8000}print(max(dic.keys()))
print(max(dic.values()))# 求出字典中最大值对应的key
print(max(dic, key = lambda k:dic[k])) # max 和 min都支持第二个参数key 以什么为关键字
print(max(dic, key = lambda k:dic[k]),max(dic.values())) # max 和 min都支持第二个参数key 以什么为关键字

其它内置函数:

# print()
# input()
# len()
# type()
# open()
# tuple()
# list()
# int()
# bool()
# set()
# dir()
# id()
# str()# print(locals())  #返回本地作用域中的所有名字
# print(globals()) #返回全局作用域中的所有名字
# ---------- 注意区别下面的关键字------------
# global 变量
# nonlocal 变量# 迭代器.__next__()
# next(迭代器)
# 迭代器 = iter(可迭代的)
# 迭代器 = 可迭代的.__iter__()# range(10)
# range(1,11)
# print('__next__' in dir(range(1,11,2)))  # range是可迭代的,但不是迭代器# dir 查看一个变量拥有的方法
# print(dir([]))
# print(dir(1))
#       一定要学会使用 dir 和 help 做断网开发
# help 提供帮助
# help(str)# 检测是否可调用 callable
# print(callable(print))
# a = 1
# print(callable(a))
# print(callable(globals))
# def func():pass
# print(callable(func))# import time
t = __import__('time')  # 这种导入方式不常用
print(t.asctime())
print(t.ctime())
# help(t)# 某个方法属于某个数据类型的变量,就用 . 调用
# 如果某个方法不依赖于任何数据类型,就直接调用: 内置函数 和 自定义函数# f = open('1.复习.py')
# print(f.writable())
# print(f.readable())# id
# hash - 对于相同可hash数据的hash值在一次程序的执行过程中总是不变的
#      - 字典的寻址方式,用到了hash方法
print(hash(12345))
print(hash('hsgda不想你走,assssssssssssssssssssssasdfffffffffffasdnklgkds'))
print(hash('hsgda不想你走,assssssssssssssssssssssssdfffffffffffasdnklgkds'))
print(hash(('1', 'aaa')))
# print(hash([]))     # 不可hash# ret = input('提示 : ')
# print(ret)print('我们的祖国是花园', end='')  # 指定输出的结束符
print('我们的祖国是花园', end='\t')
print(1, 2, 3, 4, 5, sep='|')  # 指定输出多个值之间的分隔符f = open('file', 'w')
print('aaaa', file=f)  # 如果给 print 一个文件句柄,则输出到文件
f.close()

import timefor i in range(0, 101, 2):time.sleep(0.06)char_num = i // 2per_str = '\r%s%% : %s\n' % (i, '*' * char_num) \if i == 100 else '\r%s%% : %s' % (i, '*' * char_num)print(per_str, end='', flush=True)# progress Bar 进度条模块exec('print(123)')
eval('print(123)')
print(eval('1+2+3+4'))   # 有返回值
print(exec('1+2+3+4'))   # 没有返回值
# exec和eval都可以执行 字符串类型的代码
# eval有返回值     —— 有结果的简单计算
# exec没有返回值   —— 简单流程控制
# eval只能用在你明确知道你要执行的代码是什么code = '''for i in range(10):print(i*'+')
'''
exec(code)

# eval 计算类
# exec 流程类
# compile 交互类# 使用 compile 编译文本
code1 = 'for i in range(0,10): print (i)'
compile1 = compile(code1, '', 'exec')
exec(compile1)# code2 = '1 + 2 + 3 + 4'
# compile2 = compile(code2,'','eval')
# print(eval(compile2))# code3 = 'name = input("please input your name:")'
# compile3 = compile(code3,'','single')
# exec(compile3) #执行时显示交互命令,提示输入
# print(name)
# name #执行后name变量有值
# "'pythoner'"# 复数 —— complex
# 实数 : 有理数
#         无理数
# 虚数 :虚无缥缈的数
# 5 + 12j  === 复合的数 === 复数
# 6 + 15j# 浮点数(有限循环小数,无限循环小数)  != 小数 :有限循环小数,无限循环小数,无限不循环小数
# 浮点数
# 354.123 = 3.54123*10**2 = 35.4123 * 10
# f = 1.781326913750135970
# print(f)  # 过长的浮点数会损失一点精度print(bin(10))    # 二进制
print(oct(10))    # 八进制
print(hex(10))    # 16进制# print(abs(-5))
# print(abs(5))print(divmod(7,2))   # div除法 mod取余
print(divmod(9,5))   # 除余 得到元组# print(round(3.14159,3))
# print(pow(2,3))   #pow幂运算  == 2**3
# print(pow(3,2))
# print(pow(2,3,3)) #幂运算之后再取余
# print(pow(3,2,1))ret = sum([1,2,3,4,5,6])
print(ret)ret = sum([1,2,3,4,5,6,10],)
print(ret)# print(min([1,2,3,4]))
# print(min(1,2,3,4))
# print(min(1,2,3,-4))
# print(min(1,2,3,-4,key = abs))# print(max([1,2,3,4]))
# print(max(1,2,3,4))
# print(max(1,2,3,-4))
print(max(1,2,3,-4,key = abs))print(3>2==2)   # True

继续补充:注意list作为函数的参数的问题

def extlist(val, lis=[]):lis.append(val)return lislist1 = extlist(10)
print(list1)
list2 = extlist(123,[])
print(list2)
list3 = extlist('a')
print(list3)
print(list1)   # 这个结果将和list3一样,因为是可变数据类型。类似于 lis=[] 独立在函数之外print(5 + 12j)  # 实数 + 虚数 == 复数# 取某个 range中的数时,一定要list下,才能取得到

slice , format , bytes , expr

lis = [1,2,3,4,5]l2 = reversed(lis) # 保留原有列表,返回一个反向的迭代器
print(l2)
print(lis)s = slice(0,5,2)    # 切片
print(lis[s])       # 等同于下面的切片
print(lis[0:5:2])print(format('***','<20'))      # 左对齐
print(format('***','>20'))      # 右对齐
print(format('***','^20'))      # 居中对齐print(format(3,'b'))        # 转为二进制
print(format(95,'c'))       # 转成 unicode字符
print(format(13,'x'))       # 转成16进制print(bytes('你好',encoding='gbk'))
print(bytes('你好',encoding='utf8'))              # 编码
print(b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode('utf8'))  # 解码a = 'abcd'
print('hello %r' %a)   # %r 调用了 repr 方法
print(repr(a))      # 变量原样输出 %r

all , any , zip , filter , map , sorted

# all 有一个False,即为False , any 是有一个True,即为 True
print(all(['a', '', 123]))
print(all(['a', 123]))
print(all([0, 123]))print(any(['', True, 0, []]))# 拉链方法
l = [1, 2, 3, 4, 5]
l2 = ['a', 'b', 'c', 'd']
l3 = ('*', '**', [1, 2])
d = {'k1': 1, 'k2': 2}# for i in zip(l,l2):
#     print(i)for i in zip(l, l2, l3, d):print(i)# filter 重要的过滤方法
def is_odd(x):return x % 2 == 1# print(is_odd(9))   # True# 第一个参数只能是函数名,没有括号。第二个是可迭代对象
ret = filter(is_odd,[3,6,7,9,12,17])
# print(ret)
for i in ret:print(i)# 例二  过滤字符串
def is_str(x):return type(x) == strres = filter(is_str,[1,'alex',3,5,'abc',8])
for i in res:print(i)# 例三 求100以内开方结果为整数的数
from math import sqrt
def func(n):res = sqrt(n)return res %1 ==0rs = filter(func,range(1,101))
for i in rs:print(i)# 例四: 去除列表中的空元素
def real_str(x):return x and str(x).strip()res = filter(real_str,[1,'alex',0,' ','  ',None])
for i in res:print(i)ret = map(abs,[1,-4,6,-8])
print(ret)
for i in ret:print(i)# filter 执行了filter之后的结果集合 <= 执行之前的个数#filter只管筛选,不会改变原来的值
# map 执行前后元素个数不变# 值可能发生改变l = [1,-4,6,5,-10]
# l.sort()            # 在原列表的基础上进行排序
# print(l)
l.sort(key = abs)     # 带上处理函数的排序
print(l)print(sorted(l,key=abs,reverse=True))      # 生成了一个新列表 不改变原列表 占内存
print(l)l = ['   ',[1,2],'hello world']
new_l = sorted(l,key=len)
print(new_l)

转载于:https://www.cnblogs.com/FHBIAO/p/10174396.html

python基础12_匿名_内置函数相关推荐

  1. Python学习笔记(4)~Python基础练习之常用内置函数(1-10)

    Python基础练习之常用内置函数(1-10) 1.abs() 作用         求数的绝对值或者复数的模 测试demo #!/usr/bin/python3 # abs: 求绝对值 or 复数的 ...

  2. python方法和函数的格式是完全一样的_【python基础语法】常用内置函数、关键字、方法和之间的区别(小结)...

    '''关键字: False:bool数据类型 True:bool数据类型 None:表示数据的内容为空 and:逻辑运算符:与 or:逻辑运算符:或 not:逻辑运算符:非 in:身份运算符,判断变量 ...

  3. python基础总结--- 列表、内置函数(4-5)

    文章目录 6. 列表 6.1 列表的索引和切片 6.2 修改列表的元素值 6.3 列表的常用方法 6.3.1 添加元素append 6.3.2 添加元素 extend 6.3.3 插入元素insert ...

  4. Python自学之路——Python基础(四)内置函数

    对上表一些比较重要常用的内置函数做一个整理 chr()与ord()     chr()是将ASCII中十进制编号转换成相应的字符,而ord()刚好相反 c = chr(49) o = ord('1') ...

  5. Python基础12-常用的内置函数

    abs 取绝对值,数学上的绝对值 print(abs(-1)) all 接收一个可迭代参数.如果里面有一个False的元素,那么返回值就是False,否则返回True,类似逻辑"与" ...

  6. python一些常用函数_【python】常用的一些内置函数

    1.cmp cmp(A,B)函数,比较A,B的大小,如果A大于B,返回1,A小于B返回-1,A等于B返回0 print cmp(12,33) >>>-1 print cmp(&quo ...

  7. 查看python内部模块命令,内置函数,查看python已经安装的模块命令

    查看python内部模块命令,内置函数,查看python已经安装的模块命令 可以用dir(modules) 或者用 pip list 或者用 help('modules') 或者用 python -m ...

  8. 二十六. Python基础(26)--类的内置特殊属性和方法

    二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...

  9. Python中这两个内置函数locals 和globals,你了解吗?

    这两个函数主要提供,基于字典的访问局部和全局变量的方式. 在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的 东西来记录变量的轨迹.名字空间只是一个字典,它 ...

最新文章

  1. Java基础学习总结(22)——异常处理
  2. 让机器“自愈化”引领新科技变革
  3. leetcode 233 number of digit one
  4. Keras学习代码—github官网examples
  5. linux bash环境,Win10系统怎样启用Linux Bash环境
  6. 【Data guard】Switchover切换
  7. php static 关键字
  8. 语音社交app源码中音频混音的实现步骤
  9. 六大免费网站数据采集器对比(火车头,海纳,云采集,ET,三人行,狂人采集)
  10. Html5实现植物大战僵尸小游戏
  11. python抓取qq空间相册_用Python爬取QQ空间说说和相册!还不让我访问!
  12. 批处理从入门到精通_DOS/BAT
  13. java 自动补全_eclipse自动补全的设置
  14. CentOS7.6的详细安装步骤
  15. 神经网络的心得体会,神经网络心得体会
  16. appium连接ios手机
  17. Linux: 关于 SIGCHLD 的更多细节
  18. 运行tensorflow-datasets遇到import tensorflow.compat.v2 as tf报错ImportError: No module named tensorflow.V2
  19. 《数据时代 2025》报告-2017年版
  20. 【工业互联网】工业互联网与工业大数据分析的应用

热门文章

  1. 【Huggingface系列学习】Finetuning一个预训练模型
  2. MogaFX—日本进行了至少300亿美元的干预以支撑日元
  3. UpdatePanel 用法
  4. Android开发之SurfaceView详解
  5. Estrogen Protects Neurotransmission Transcriptome During Status Epilepticus
  6. 2022年1月22日蓝桥杯STEMA竞赛C++中高级组第3题近似值
  7. Java实现即时聊天:聊天服务器+聊天客户端+Web管理控制台
  8. springboot websocket 设置长连接时间
  9. python矩阵运算
  10. 下拉框Spinner