python之路——5、内置函数和匿名函数

阅读目录

  •   楔子
  •   内置函数
  •   匿名函数
  •   本章小结

返回顶部

楔子

在讲新知识之前,我们先来复习复习函数的基础知识。

问:函数怎么调用?

函数名()

如果你们这么说。。。那你们就对了!好了记住这个事儿别给忘记了,咱们继续谈下一话题。。。

来你们在自己的环境里打印一下自己的名字。

你们是怎么打的呀?

是不是print(‘xxx‘),好了,现在你们结合我刚刚说的函数的调用方法,你有没有什么发现?

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

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

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

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

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

返回顶部

内置函数

接下来,我们就一起来看看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大类。你看下面这张图,你猜咱们今天会学哪几大类呀?

我猜你们都猜对了。我们今天就要学习用粉红色标注出来的这四大块——56个方法。还有12个方法欠着怎么办呢?我们讲完面向对象这剩下的12个会在两周之内陆续还给你们的,我保证(认真脸)。那这样,我们今天就主要关注我们要学习的这56个方法。

那要学的一共4块,咱们从哪儿开始学起呢?

作用域相关

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

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

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

其他

字符串类型代码的执行

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

输入输出相关:

input() 输入

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

input的用法

print() 输出

def print(self, *args, sep=‘ ‘, end=‘\n‘, file=None): # known special case of print
    """
    print(value, ..., sep=‘ ‘, end=‘\n‘, file=sys.stdout, flush=False)
    file:  默认是输出到屏幕,如果设置为文件句柄,输出到文件
    sep:   打印多个值之间的分隔符,默认为空格
    end:   每一次打印的结尾,默认为换行符
    flush: 立即把内容输出到流文件,不作缓存
    """

print源码剖析

f = open(‘tmp_file‘,‘w‘)
print(123,456,sep=‘,‘,file = f,flush=True)

file关键字的说明

import time
for i in range(0,101,2):
     time.sleep(0.1)
     char_num = i//2      #打印多少个‘*‘
     per_str = ‘\r%s%% : %s\n‘ % (i, ‘*‘ * char_num) if i == 100 else ‘\r%s%% : %s‘%(i,‘*‘*char_num)
     print(per_str,end=‘‘, flush=True)
#小越越  : \r 可以把光标移动到行首但不换行

打印进度条

数据类型相关:

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

内存相关:

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

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

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

导入模块

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

__import__

帮助方法

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

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

和调用相关

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

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

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

callable实例

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

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

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

查看某变量/数据类型的内置方法

和数字相关

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

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

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

和数据结构相关

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

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

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

bytearray

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

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

reversed

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

返回顶部

匿名函数

匿名函数:为了解决那些功能很简单的需求而设计的一句话函数

#这段代码
def calc(n):
    return n**n
print(calc(10))

#换成匿名函数
calc = lambda n:n**n
print(calc(10))

上面是我们对calc这个匿名函数的分析,下面给出了一个关于匿名函数格式的说明

函数名 = lambda 参数 :返回值

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

我们可以看出,匿名函数并不是真的不能有名字。

匿名函数的调用和正常的调用也没有什么分别。 就是 函数名(参数) 就可以了~~~

练一练:

请把以下函数变成匿名函数
def add(x,y):
    return x+y

上面是匿名函数的函数用法。除此之外,匿名函数也不是浪得虚名,它真的可以匿名。在和其他功能函数合作的时候

l=[3,2,100,999,213,1111,31121,333]
print(max(l))

dic={‘k1‘:10,‘k2‘:100,‘k3‘:30}

print(max(dic))
print(dic[max(dic,key=lambda k:dic[k])])

res = map(lambda x:x**2,[1,5,7,4,8])
for i in res:
    print(i)

输出
1
25
49
16
64

res = filter(lambda x:x>10,[5,8,11,9,15])
for i in res:
    print(i)

输出
11
15

面试题练一练

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

#答案一
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)])

coding

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://www.cnblogs.com/walkie/p/11612431.html

时间: 2024-10-23 13:24:54

python之路——5、内置函数和匿名函数的相关文章

python之路---13 内置函数

三十一.内置函数 思维导图 1.作用域相关 locals()     返回当前作用域中的名字 globals()  返回全局作用域中的名字 2.迭代器相关 range()     生成数据 next()      迭代器向下执行一次   等价于  .__next__() iter()        获取迭代器      等价于   .__iter__() 3.字符串类型代码的执行 ①eval    执行字符串类型的代码,并返回最终结果 可还原 字典  列表  元组 ②exec    执行字符串类

Python内置的字符串处理函数整理

Python内置的字符串处理函数整理 作者: 字体:[增加 减小] 类型:转载 时间:2013-01-29我要评论 Python内置的字符串处理函数整理,收集常用的Python 内置的各种字符串处理 函数的使用方法 str='python String function' 生成字符串变量str='python String function' 字符串长度获取:len(str)例:print '%s length=%d' % (str,len(str)) 字母处理全部大写:str.upper()全

python学习笔记11-python内置函数

python学习笔记11-python内置函数 一.查看python的函数介绍: https://docs.python.org/2/library/ 二.python内置函数 1.abs获取绝对值: 通过python官网查看abs abs(x) Return the absolute value of a number. The argument may be a plain or long integer or a floating point number. If the argument

Python标准库:内置函数open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=T

本函数是打开一个文件并返回文件对象.如果文件不能打开,抛出异常OSError. 参数file是一个字符串表示的文件名称,或者一个数组表示的文件名称.文件名称可以是相对当前目录的路径,也可以是绝对路径表示. 参数mode是指明打开文件的模式.默认值是'r',表示使用文本的方式打开文件来读取. 'r'表示打开文件只读,不能写. 'w'表示打开文件只写,并且清空文件. 'x'表示独占打开文件,如果文件已经存打开就会失败. 'a'表示打开文件写,不清空文件,在文件后尾追加的方式写入. 'b'表示二进制的

Python标准库:内置函数str(object='') str(object=b'', encoding='utf-8', errors='strict')

本函数是实现返回字符串对象.参数object是要转换内容的对象:参数encoding是编码方式:errors是错误处理方式. 例子: #str() print(str(b'abc')) print(str(200)) print(str(b'\xe5\x93\x88\xe5\x93\x88', encoding = 'utf-8', errors = 'ignore')) print(str('蔡屋围'.encode('utf-8'), encoding = 'utf-8', errors =

python——内置函数和匿名函数

内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的.那今天我们就一起来认识一下python的内置函数.这么多函数,我们该从何学起呢?     Built-in Functions     abs() dict() help() min() setat

Python标准库:内置函数print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

本函数是实现对象以字符串表示的方式格式化输出到流文件对象file里.其中所有非关键字参数都按str()方式进行转换为字符串输出,关键字参数sep是实现分隔符,比如多个参数输出时想要输出中间的分隔字符:关键字参数end是输出结束时的字符,默认是换行符\n:关键字参数file是定义流输出的文件,可以是标准的系统输出sys.stdout,也可以重定义为别的文件:参数flush是立即把内容输出到流文件,不作缓存. 例子: #print() print(1, 2, 3, sep = ',', end =

Python:常用的内置函数

内置方法  说明  __init__(self,...)  初始化对象,在创建新对象时调用  __del__(self)  释放对象,在对象被删除之前调用  __new__(cls,*args,**kwd)  实例的生成操作  __str__(self)  在使用print语句时被调用  __getitem__(self,key)  获取序列的索引key对应的值,等价于seq[key]  __len__(self)  在调用内联函数len()时被调用  __cmp__(stc,dst)  比较两

python内置函数和匿名函数

内置函数 68个内置函数.它们就是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()