内置函数和匿名函数

内置函数什么是内置函数在聊内置函数之前,我们先来回顾一下普通函数的基础知识。问:函数怎么调用?答:函数名()现在我们在自己的程序里打印一下自己的名字,该怎么打的呀?print('x

大家好,又见面了,我是你们的朋友全栈君。

 内置函数

什么是内置函数

在聊内置函数之前,我们先来回顾一下普通函数的基础知识。

问:函数怎么调用?

答:函数名()

现在我们在自己的程序里打印一下自己的名字,该怎么打的呀?

print(‘xxxx’)

好了,现在结合刚刚的函数的调用方法,你有没有什么发现?

我们就猜,print有没有可能是一个函数?

但是没有人实现它啊。。。它怎么就能用了呢?

早在我们“初识函数”的时候是不是就是用len()引出的?

那现在我们也知道len()也是一个函数,也没人实现,它好像就自己能用了。。。

之前老师给你讲你可以这样用你就用了,那你有没有想过像这样直接拿来就能用的函数到底有多少?

 

python的内置函数可以直接调用,无需import,例如int,str等。可以在python命令行中使用dir(__builtins__)列出查看,参考下图。

<span role="heading" aria-level="2">内置函数和匿名函数

简单的来说内置函数就是不用导入任何模块直接用的函数

内置函数有什么用

不用程序员自己去定义或者导入特定的函数,在需要实现某些特定的需求的时候直接调用即可,方便快捷,效率更高

内置函数都有哪些

接下来,我们就一起来看看python里的内置函数。截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的。那今天我们就一起来认识一下python的内置函数

    Built-in Functions    
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()  
delattr() hash() memoryview() set()  

上面就是内置函数的表,68个函数都在这儿了。这个表的顺序是按照首字母的排列顺序来的,你会发现都混乱的堆在一起。比如,oct和bin和hex都是做进制换算的,但是却被写在了三个地方。。。这样非常不利于大家归纳和学习。那我把这些函数分成了6大类。具体来看下面的图吧!

 

<span role="heading" aria-level="2">内置函数和匿名函数

 这样看起来感觉就舒服多喽。。。。。。。接下来详细的介绍一下吧

作用域相关

<span role="heading" aria-level="2">内置函数和匿名函数

基于字典的形式获取局部变量和全局变量

globals()——获取全局变量的字典

locals()——获取执行本方法所在命名空间内的局部变量的字典

其他

<span role="heading" aria-level="2">内置函数和匿名函数

字符串类型代码的执行

http://www.cnblogs.com/Eva-J/articles/7266087.html

 

输入输出相关:

input() 输入

<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

s = input("请输入内容 : ")  #输入的内容赋值给s变量
print(s)  #输入什么打印什么。数据类型是str

View Code

print() 输出

 

数据类型相关:

type(o) 返回变量o的数据类型

 

内存相关:

id(o) o是参数,返回一个变量的内存地址

hash(o) o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。

<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

t = (1,2,3)
l = [1,2,3]
print(hash(t))  #可hash
print(hash(l))  #会报错

'''
结果:
TypeError: unhashable type: 'list'
'''

hash实例

hash函数会根据一个内部的算法对当前可hash变量进行处理,返回一个int数字。

*每一次执行程序,内容相同的变量hash值在这一次执行过程中不会发生改变。

 

文件操作相关

open()  打开一个文件,返回一个文件操作符(文件句柄)

操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)

可以用encoding指定编码.

 

模块操作相关

__import__导入一个模块

import time
<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

os = __import__('os')
print(os.path.abspath('.'))

__import__

 

帮助方法

在控制台执行help()进入帮助模式。可以随意输入变量或者变量的类型。输入q退出

或者直接执行help(o),o是参数,查看和变量o有关的操作。。。

 

和调用相关

callable(o),o是参数,看这个变量是不是可调用。

如果o是一个函数名,就会返回True

<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

def func():pass
print(callable(func))  #参数是函数名,可调用,返回True
print(callable(123))   #参数是数字,不可调用,返回False

callable实例

 

查看参数所属类型的所有内置方法

dir() 默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量

<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

print(dir(list))  #查看列表的内置方法
print(dir(int))  #查看整数的内置方法

查看变量/数据包类型的方法

 

和数字相关

<span role="heading" aria-level="2">内置函数和匿名函数

 

数字——数据类型相关:bool,int,float,complex

数字——进制转换相关:bin,oct,hex

数字——数学运算:abs,divmod,min,max,sum,round,pow

 

和数据结构相关

<span role="heading" aria-level="2">内置函数和匿名函数

序列——列表和元组相关的:list和tuple

序列——字符串相关的:str,format,bytes,bytearry,memoryview,ord,chr,ascii,repr

<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

ret = bytearray('alex',encoding='utf-8')
print(id(ret))
print(ret[0])
ret[0] = 65
print(ret)
print(id(ret))

bytearry

<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

ret = memoryview(bytes('你好',encoding='utf-8'))
print(len(ret))
print(bytes(ret[:3]).decode('utf-8'))
print(bytes(ret[3:]).decode('utf-8'))

memoryview

 

序列:reversed,slice

<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

l = (1,2,23,213,5612,342,43)
print(l)
print(list(reversed(l)))

reversed

<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

l = (1,2,23,213,5612,342,43)
sli = slice(1,5,2)
print(l[sli])

slice

 

数据集合——字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,all,any,zip,filter,map

filter和map:http://www.cnblogs.com/Eva-J/articles/7266192.html

sorted方法:http://www.cnblogs.com/Eva-J/articles/7265992.html

匿名函数

定义及作用

定义:匿名函数即没有绑定名字的函数,没有绑定名字,意味着只能用一次就会被回收所以说匿名函数的应用场景就是:某个功能只用一次就结束了
作用:通常不希望再次使用(即只使用一次的)的函数可以定义为匿名函数.

匿名函数的结构及详解

<span role="heading" aria-level="2">内置函数和匿名函数

函数名 = lambda 参数 :返回值

#参数可以有多个,用逗号隔开
#匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
#返回值和正常的函数一样可以是任意数据

普通函数转换为匿名函数

def add(x,y):
    return x+y

--》lambda  x,y : x+y

匿名函数也不是浪得虚名,它真的可以匿名。在和其他功能函数合作的时候

<span role="heading" aria-level="2">内置函数和匿名函数
示例

面试题练习

现有两个元组((‘a’),(‘b’)),((‘c’),(‘d’)),请使用python中匿名函数生成列表[{‘a’:’c’},{‘b’:’d’}]

<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

#答案一
test = lambda t1,t2 :[{i:j} for i,j in zip(t1,t2)]
print(test(t1,t2))
#答案二
print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2))))
#还可以这样写
print([{i:j} for i,j in zip(t1,t2)])

View Code

<span role="heading" aria-level="2">内置函数和匿名函数
<span role="heading" aria-level="2">内置函数和匿名函数

1.下面程序的输出结果是:
d = lambda p:p*2
t = lambda p:p*3
x = 2
x = d(x)
x = t(x)
x = d(x)
print x

2.现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

3.以下代码的输出是什么?请给出答案并解释。
def multipliers():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])
请修改multipliers的定义来产生期望的结果。

练习题

章节小结

说学习内置函数,不如说整理自己的知识体系。其实整理这些内置函数的过程也是在整理自己的知识体系。

我们讲课的时候会归类:常用或者不常用,主要还是根据场景而言。

一个优秀的程序员就应该是在该用这个方法的时候信手拈来,把每一个内置的函数都用的恰到好处。

要想做到这一点,至少要先了解,才能在需要的时候想起,进而将它用在该用的地方。

但是在这里,我还是以自己的一点经验之谈,把几个平时工作中相对更常用的方法推荐一下,请务必重点掌握:

其他:input,print,type,hash,open,import,dir

str类型代码执行:eval,exec

数字:bool,int,float,abs,divmod,min,max,sum,round,pow

序列——列表和元组相关的:list和tuple

序列——字符串相关的:str,bytes,repr

序列:reversed,slice

数据集合——字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,zip,filter,map

内置函数详请参考:https://docs.python.org/3/library/functions.html#object

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124535.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java CAS详解[通俗易懂]

    java CAS详解[通俗易懂]CAS解释:CAS(compareandswap),比较并交换。可以解决多线程并行情况下使用锁造成性能损耗的一种机制.CAS操作包含三个操作数—内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。一个线程从主内存中得到num值,并对num进行操作,写入值的时候,线程会把第一次取到的num值和主内存中num值进行比较,如果相等,就会将改变后的num写入主内存,如果不相等,则一直循环对比,知道成功为止。CAS

    2022年7月9日
    24
  • fiddler 抓包详细教程「建议收藏」

    为什么要先学fiddler?学习接口测试必学http协议,如果直接先讲协议,我估计小伙伴们更懵,为了更好的理解协议,先从抓包开始。结合抓包工具讲http协议更容易学一些。抓firefox上https请求fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的https请求,会提示网页不安全,这时候需要在浏览器上安装证书。一、网页不安全1.用fiddler抓包时候,打开百…

    2022年4月9日
    150
  • awk 用法示例大全[通俗易懂]

    awk 用法示例大全[通俗易懂]文章目录#删除temp文件的重复行awk’!($0inarray){array[$0];print}’temp#查看最长使用的10个unix命令awk'{print$1}’~/.bash_history|sort|uniq-c|sort-rn|head-n10#查看机器的ip列表ifconfig-a|awk’/Bcast/{print$2}’|cut-c5-19#查看机器的每个远程链接机器的连接数netstat-ant

    2022年7月11日
    18
  • Error creating bean with name ‘eurekaClientConfigBean’: Singleton bean creation not allowed!

    做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!今天发现一个错误,简单记录一下,运行一个项目一直启动不了,发现控制台报错了。首先说明一下这是一个Spring boot 集成Quartz做任务调度的项目,版本信息就不贴了,因为和本文最终的解决方案没有什么关系。错误信息如下:2019-09-05 09:56:23.993 WARN [web-scheduler…

    2022年2月28日
    50
  • 使用Spark SQL构建批处理程序

    使用Spark SQL构建批处理程序

    2021年9月17日
    61
  • Response.ContentType

    Response.ContentType说明一下,类中的HttpContext.Current.Response.ContentType表示要导出文件的类型,下面是对Response.ContentType类型的汇总在ASP.NET中使用R

    2022年7月1日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号