一、内置函数如何使用

help()一下:

如想看min()咋用?在shell中:help(min)

二、部分内置函数

(一).排序:sorted()

li = [(1, 2, 3, 4), (7, 8, 1, 4), (3, 4, 6, 2), (6, 5, 9, 2)]
print(sorted(li, key=lambda a: a[1]))
# lambda a: a[1] 以元组的第二个值作为排序依据。
# 运行结果:[(1, 2, 3, 4), (3, 4, 6, 2), (6, 5, 9, 2), (7, 8, 1, 4)]

sorted()是python3的内置函数,返回一个新列表,不改变原来的数据,如要改变需赋值。

sort()是列表的函数:list.sort(),没有返回值,直接在原数据上进行修改。

(二).枚举:enumerate()

enumerate 是个迭代器。

如要查看枚举中的内容,可用 list(enumerate[1,2,3]) 来查看。

print(list(enumerate([1, 2, 3])))
# 运行结果:[(0, 1), (1, 2), (2, 3)] # 可指定索引的开始值:
print(list(enumerate([1, 2, 3], 2)))
# 运行结果:[(2, 1), (3, 2), (4, 3)] # 转换为一个字典:(这里同样指定了索引的开始值)
print(dict(enumerate([1, 2, 3], 2)))
# 运行结果:{2: 1, 3: 2, 4: 3}

(三).过滤器:filter(function or None,iterable)

字面意思理解一下,过滤、过滤,就是过滤掉自己不想要的那部分内容。

第一个参数需要放一个函数体,或者写"None",因为是必备参数。

# 提取一个列表中,出大于2的元素
print(list(filter(lambda x: x > 2, [1, 2, 3, 4, 5])))
# 运行结果:[3, 4, 5]

把符合条件的都提取出来。但是,iterable对象中,如果有:空序列、False、0,也会被去除。

(四).配对:zip(iterable1,iterable2,...)

# iterable 中的值 一一匹对  1 vs 1
print(list(zip([1, 2, 3], ["a", "b", "c"], [10, 20, 30])))
# 运行结果:[(1, 'a', 10), (2, 'b', 20), (3, 'c', 30)]
# 既然是一一对应,那么少了其中任何一个都不会再去匹对了 # 少了第二个 iterable 中的 "b"
print(list(zip([1, 2, 3], ["a", "c"], [10, 20, 30])))
# 运行结果:[(1, 'a', 10), (2, 'c', 20)] # 少了第一个 iterable 中的 2 和 第三个 iterable 中的 10
print(list(zip([1, 3], ["a", "b", "c"], [20, 30])))
# 运行结果:[(1, 'a', 20), (3, 'b', 30)]
# 同时遍历两个或更多的序列,可以使用 zip() 组合
questions = ["what's your name", "how old", "favorite color"]
answers = ["quanquan616", 30, "blue"]
for i, j in zip(questions, answers):
print("{}? {}".format(i, j)) """
运行结果:
what's your name? quanquan616
how old? 30
favorite color? blue
"""

(五).加工:map(func,*iterable)

func是指定一个函数体,指定以什么方式去加工。

*iterable "*"是什么?前面的内容有提到过,解包了。

print(list(map(str, [1, 2, 3])))
# 远行结果:['1', '2', '3']

此例中,str是指定了加工的方式。

list()是用来查看map()对象中的元素,tuple也可以。

三、作用域(全局、局部变量)

全局变量定义在函数体外,可以访问,但不可以修改。

(一).global 用途:

(1)、如果要修改函数体外定义的全局变量,需要在对应变量名前加"global"关键字来修饰。(类似授权的概念)

(2)、函数体中的局部变量,如果要在函数体外访问到它,也需要在前加"global"

# --- global 第一种用法 --- #
n = 1 # 这里是全局变量
def fun():
n += 1
print(n)
fun()
# 运行直接报错!
# UnboundLocalError: local variable 'n' referenced before assignment
# 大意:n 是局部变量,未定义,无法使用
# 需要在 n 前加上 global n = 1
def fun():
global n
# 不能写成:global n += 1 会报语法错误!
n += 1
print(n)
fun() # 还有一种情况:
n = 1 # 这里是全局变量
def fun(a, b):
n = a + b # n 在这里是局部变量
print(n)
fun(10, 20)
print(n) # 运行结果:30 1
# --- global 第二种用法 --- #
def fun():
n = 616
fun()
print(n) # NameError: name 'n' is not defined // 语法错误 n 没有定义
# 在外要想访问函数体里的局部变量 n 就需要在前面加 global def fun():
# 如果 n 在 global 语句前定义,就会报错!
# SyntaxError: name 'n' is assigned to before global declaration
# 语法错误:n 在global声明前就分配了
global n
n = 616
fun()
print(n)

(二).nonlocal:当里层局部,需要修改局部外层时,用 nonlocal 修饰。在嵌套函数中会用到。

def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
# 不声明依旧是这个报错:UnboundLocalError: local variable 'num' referenced before assignment
num = 100
print(num)
inner() # 不调用是不会执行的 // 必须写在这里,不然未定义报错,因为函数必须先声明后使用  
print(num)
outer() # 运行结果:100 100

(三).总结

(1).外部不能访问函数内部的变量。

(2).函数内部能够访问函数外部的变量。

(3).函数里部不能修改函数外部的变量。

(四).作用域链

从内向外,依次去寻找变量。

在函数定义的时候,作用域链其实就已经形成了。

四、回调函数

def test1():
print("") def fun2(a):
a()
print("") # 后面调用前面
fun2(test1) # 把函数体当作参数传过去

五、闭包

首先,闭包需要是嵌套函数。调用外层,返回里层的函数体。(外层函数返回里层函数)

通俗地讲:闭包是函数里面嵌套函数,外层函数返回里层函数,这种情况称之为闭包。

闭包能够维持住这个变量。JS中能体会到它的用途,但是JS和python的闭包是同一回的事儿。

简单来说,闭包有这么两个作用:

(1).构造局部的全局变量。

(2).在没有类的情况下,封装变量。

def fun1():
a = 1
print(a) def fun2(): # 封闭在函数里面
b = 2
print(b) return fun2 # 加了括号()是调用。不加括号"()",返回函数体 print(fun1()) """
运行结果:
1
<function fun1.<locals>.fun2 at 0x0067D6F0>
"""

补充内容:闭包+回调函数+语法糖=装饰器

五、递归

递归的特点:

(1).自己调用自己。

(2).必须要有一个出口!

# 示例:5的阶乘
# 5! = 5*4*3*2*1
def jiec(n):
if n == 1:
return 1
# 如果把1写成0,结果就是0了。因为最后一个数乘以了0
else:
return jiec(n - 1) * n
print(jiec(5))

六、补充内容

可变的数据类型,可以在函数里面,直接进行修改:

li = [1, 2, 3]
tu = ("a", "b", "c") def test(li, tu):
# 元组不可变,所以tu不能直接修改
# 而li就可以在函数中直接修改
li.append("python") test(li, tu) print(li) # 原来的li被修改了
print(tu) """
远行结果:
[1, 2, 3, 'python']
('a', 'b', 'c')
"""

好处:在函数中修改了,无需重新赋值,就会改变。

坏处:当不想改变原数据时,显得略坑。需要提前copy()一份。

可变的对象都有copy()这个方法。

小练习:

(1).定义一个函数,输入一个序列(序列元素是同种类型),判断序列是顺序还是逆序,顺序输出"UP",逆序输出"DOWN",乱序否则输出"None"

import re

def is_up_down_none(list_value):
up = sorted(list_value) # 顺序排序
down = sorted(list_value, reverse=True) # 倒序排序
if list_value == up: # 原列表与up比较
print("顺序的,UP") # 一样的话肯定是顺序的
elif list_value == down: # 原列表与down比较
print("倒序的,DOWN") # 一样的话肯定是倒序的
else:
print("乱序的,None") while 1:
strings = input("请输入内容:")
list_value = list(re.findall("[a-zA-Z0-9]", strings)) # 用正则提取出每个元素,因为比较的是列表
is_up_down_none(list_value)

(2).写一个函数,对列表li = [9,8,3,2,6,4,5,7,1],进行从小到大的排序。最后返回li

# 使用内置函数:sorted()
def sorting(li1):
return sorted(li1)
li1 = [9, 8, 3, 2, 6, 4, 5, 7, 1]
g = sorting(li1)
print(g)
# 使用冒泡排序法(我个人还是比较好理解这个方法)
def bubbling(li1):
for i in range(len(li1)): # list的下标是从0开始的,range()左闭右开,取不到最后一个数值,刚好不会造成列表index溢出
for j in range(i): # 只需比较8次就可以了,因为最后一次肯定是最小值在前面了
if li1[i] < li1[j]:
li1[i], li1[j] = li1[j], li1[i]
print(li1)
li1 = [9, 8, 3, 2, 6, 4, 5, 7, 1]
bubbling(li1)

Python 内置函数、作用域、闭包、递归的更多相关文章

  1. python 内置函数补充 or 递归 or 二分法

    一.内置函数的补充 repr() 显示出字符串的官方表示形式 chr() print(chr(20013)) # 把数字编码转换成字符串 ord() print(ord('中')) # 20013 把 ...

  2. Python进阶(五)----内置函数Ⅱ 和 闭包

    Python进阶(五)----内置函数Ⅱ 和 闭包 一丶内置函数Ⅱ ####内置函数#### 特别重要,反复练习 ###print() 打印输入 #sep 设定分隔符 # end 默认是换行可以打印到 ...

  3. Python内置函数和内置常量

    Python内置函数 1.abs(x) 返回一个数的绝对值.实参可以是整数或浮点数.如果实参是一个复数,返回它的模. 2.all(iterable) 如果 iterable 的所有元素为真(或迭代器为 ...

  4. 【转】python 内置函数总结(大部分)

    [转]python 内置函数总结(大部分) python 内置函数大讲堂 python全栈开发,内置函数 1. 内置函数 python的内置函数截止到python版本3.6.2,现在python一共为 ...

  5. python内置函数,匿名函数

    一.匿名函数 匿名函数:为了解决那些功能很简单的需求而设计的一句话函数 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n ...

  6. python 内置函数总结(大部分)

    python 内置函数大讲堂 python全栈开发,内置函数 1. 内置函数 python的内置函数截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是pytho ...

  7. python内置函数详细介绍

    知识内容: 1.python内置函数简介 2.python内置函数详细介绍 一.python内置函数简介 python中有很多内置函数,实现了一些基本功能,内置函数的官方介绍文档:    https: ...

  8. Python内置函数(4)

    Python内置函数(4) 1.copyright 交互式提示对象打印许可文本,一个列表贡献者和版权声明 2.credits 交互式提示对象打印许可文本,一个贡献者和版权声明的列表 3.delattr ...

  9. python内置函数

    python内置函数 官方文档:点击 在这里我只列举一些常见的内置函数用法 1.abs()[求数字的绝对值] >>> abs(-13) 13 2.all() 判断所有集合元素都为真的 ...

  10. python 内置函数和函数装饰器

    python内置函数 1.数学相关 abs(x) 取x绝对值 divmode(x,y) 取x除以y的商和余数,常用做分页,返回商和余数组成一个元组 pow(x,y[,z]) 取x的y次方 ,等同于x ...

随机推荐

  1. docker集群——介绍Mesos+Zookeeper+Marathon的Docker管理平台

    容器为用户打开了一扇通往新世界的大门,真正进入这个容器的世界后,却发现新的生态系统如此庞大.在生产使用中,不论个人还是企业,都会提出更复杂的需求.这时,我们需要众多跨主机的容器协同工作,需要支持各种类 ...

  2. ETL技术入门之ETL初认识

    ETL是什么 ETL是Extract Transform Load三个英文单词的缩写 中文意思就是抽取.转换.载入.说到ETL就必须提到数据仓库. 先说下背景知识: 信息是现代企业的重要资源,是企业运 ...

  3. Memory Barriers

    这回该进入主题了.         上一文最后提到了 Memory Barriers ,即内存屏障.由于对一个 CPU 而言,a = 1; b = 1. 由于在中间加了内存屏障,在 X86 架构下,就 ...

  4. Python 类的特殊成员方法详解

    class doges(object): """类的描述信息""" def __init__(self,name,food): self.n ...

  5. mui.fire() 和 mui.trigger()

    导读:添加自定义事件监听操作和标准js事件监听类似,可直接通过window对象添加,通过mui.fire()方法可触发目标窗口的自定义事件 监听自定义事件 添加自定义事件监听操作和标准js事件监听类似 ...

  6. mui 根据 json 数据动态创建列表

    使用 underscore.js 模块解析 Underscore提供了一个轻量级的模板解析函数,它可以帮助我们有效地组织页面结构和逻辑. 实例: <!DOCTYPE html> <h ...

  7. .Net 使用的快捷键

    快捷键 功能 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O打开项目 CTRL + SHIFT + C显示类视 ...

  8. Windows环境下完全手工配置Apache、MySQL和PHP

    现在LAMP(Linux.Apache.MySQL.PHP/Perl/Python的简称)已经很流行了.在Windows下也有类似的,比如 WAMP(Apache, MySQL, PHP on Win ...

  9. 利用python批量缩放图片

    废话少说,上代码: import matplotlib as mpl mpl.use('Agg') import os import matplotlib.pyplot as plt from sci ...

  10. rxjs来啦

    var text = document.querySelector('#text'); var inputStream = Rx.Observable.fromEvent(text, 'keyup') ...