一、匿名函数

形式:

lambda 形参:返回值

lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数。匿名函数不是说一定没名字,而是他们的名字统一称为“lambda”,可以用__name__查看

注意:

1. 函数的参数可以有多个. 多个参数之间用逗号隔开

2. 匿名函数不管多复杂. 只能写一行, 且逻辑结束后直接返回数据

3. 返回值和正常的函数一样, 可以是任意数据类型

1 #计算n的n次方
2 f = lambda n : n**n
3
4 print(f(10))

二、sorted

排序函数,形式  sorted(iterable, key=None, reverse = False)

iterrable :要进行排序的可迭代对象

key:相当于排序规则,在sorted内部会将可迭代对象的每一个元素传递给这个函数,根据函数的运算结果进行排序

reverse: 升序还是降序,False是升序,True是降序

1 lst = ["将夜","择天记","斗破苍穹","武动乾坤"]
2
3 s = sorted(lst, key= lambda el : len(el), reverse = False) #按电视剧名的长度排序
4
5 print(s)

三、filter

筛选函数,形式 filter(function , iterable )

function:筛选规则,将iterable的每一个元素传递给这个函数,根据function返回的True或者False来判断是否保留此项数据

llst = ["将夜","择天记","斗破苍穹","武动乾坤"]

s = filter( lambda el : len(el)>3,lst) #按电视剧名的长度排序
for el in s:
print(el) 结果:
斗破苍穹
武动乾坤

四、map

映射函数 形式 map(function , iterable)

function:映射规则,分别取iterable中的每一个元素,传递给函数执行,得到新的数据

1 #列表中每个元素的平方组成新列表
2 lst = [2,4,6,8,10]
3 num = map(lambda x:x*x,lst)
4
5 for el in num :
6 print(el)

五、递归

在函数中调用函数本身,就是递归(自己调用自己)

递归的最大深度是1000,但是一般都取不到

递归关键的是找到递归入口和递归出口

应用:使用递归遍历文件夹系统(递归可以用来遍历各种树形结构)

 1 def func(path, ceng)
2 lst = os.listdir(path) # 打开一个文件夹. 获取到文件夹内的所有内容
3 for el in lst: # 当前文件夹内的所有的文件名(包括文件夹名字)
4 file_real_path = os.path.join(path, el) # 拼接文件的真实路径
5 # 判断这个路径是文件还是文件夹
6 if os.path.isdir(file_real_path):
7 # 递归的入口
8 print("\t"*ceng, el)
9 func(file_real_path,ceng+1) # 重新执行刚才的操作
10
11 else: # 不是文件夹, 是文件
12 # 递归的出口
13 print("\t"*ceng, el)
14
15 func("D:/PyCharm/workspace/周作业",0) #调用函数

六、二分法

二分查找:每次能够排除掉一半的数据,查找的效率非常高。 但是局限性比较大, 必须是有序序列才可以使用二分查找。

#查找列表中是否存在n
lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]

#普通查找
def func():
n =input(">>")
for el in lst:
if el == int(n):
return True
else:
return False

# print(func())

#判断列表中是否存在n
#二分查找---非递归
n = int(input(">>"))
left = 0 #左边界
right = len(lst)-1 #右边界
while left<=right: #左边界小于等于右边界进入循环
mid = (left+right)//2 #取商的整数
if n < lst[mid]: #判断你的数字和中间数大小
right = mid-1 #右边界往左移
elif n >lst[mid]:
left = mid+1 #左边界往右移
else:
print("找到了")
break
else: # 左边界大于右边界退出循环
print("找不到")
#二分查找---递归
def digui(n,left,right):
if left <= right:
mid = (left +right)//2
if n < lst[mid]:
right = mid -1
elif n > lst[mid]:
left = mid +1
else:
print("找到了")
return True
#digui(n, left, right)
return digui(n, left, right) # 不写return,返回值始终为None
else:
return -1
ret = digui(56,0,len(lst)-1)
print(ret)

#二分查找 ----递归(切列表)
def binary_search(lst,n):
left = 0
right = len(lst)-1
if left >right:
print("找不到")
mid = (left + right)//2
if n < lst[mid]:
#binary_search(lst[:mid], n)
return binary_search(lst[:mid],n) # 不写return,返回值会始终为None
elif n > lst[mid]:
#binary_search(lst[mid + 1:], n)
return binary_search(lst[mid+1: ],n)
else:
print("找到了")
return True
ret = binary_search(lst,56)
print(ret)

示例

一、面向过程和面向对象

1、面向过程

以我为中心,做一件事先干什么,在干什么,后干什么,有一套清楚完整的流程。核心是“过程”。

优点:将要解决的问题流程化, 编写相对简单

缺点:可扩展性差

2、面向对象

以对象为中心,做一件事不需要你清楚怎么做,你创建能做这件事的对象即可。对象是具体的事物,它能实现一定的功能。

优点:可扩展性强

缺点:编程的复杂度高于面向过程

二、面向对象如何编写

在现实世界中,是先有对象,然后后归类;在代码中,是先定义类,然后再创建对象

#定义类 格式:

class 类名:

  def  __init__(self,参数):     #这是类的构造方法,在创建对象的时候会自动执行;self指当前正在创建的对象,由python自动传值

    pass

  def  方法名(self,参数):     #类中自定义的方法

    pass

#创建对象:

变量 = 类名(参数)

# 访问对象的属性信息
对象.属性
# 方法的访问:
对象.方法()

 1 #定义computer类
2 class Computer:
3 def __init__(self,pinpai,cpu):
4 self.pinpai = pinpai
5 self.cpu = cpu
6
7 def playgame(self,game):
8 print("使用%s电脑打%s游戏" % (self.pinpai, game))
9 #创建具体对象c
10 c = Computer("lenovo", "A8")
11 print(c.pinpai)
12 c.playgame("lol")
13
14 #创建对象c2
15 c2 = Computer("xiaomi", "i7")
16 print(c2.pinpai)
17 c2.playgame("吃鸡")

!!!注意:

  对类与对象关系的理解: 类通过实例化创建一个对象,每个对象都是独立的。

  点 . 可以理解为“的”,或者“调用”  比如 c.pinpai 就是对象c的品牌;c.playgame()   对象c调用playgame方法

三、面向对象和面向过程大PK

那么面向对象和面向过程到底哪个好?

具体问题,具体分析。 没有绝对的好和不好。 这点 要格外注意。

对于大型项目,更适合用面向对象;对于小型脚本,更适合用面向过程

四、面向对象三大特征

(一)封装

封装是一个很宽泛的概念,你写一个函数,可以称为封装,对象,打包成模块也都属于封装的思想。

在面向对象思想中,把一些看似无关紧要的内容组合到一起统一进行存储和使用,这就是封装。

对属性封装

  self.xxx = xxxx
对方法封装

  def 方法名():

    pass

(二)继承

继承格式

class 子类名(父类1,父类2):

  pass

子类可以自动拥有父类中除了私有内容外的其他所有内容

(三)多态

同一个对象多种形态

 1 class Animal:
2 def chi(self):
3 print("动物就知道吃")
4 class Pig(Animal):
5 def chi(self):
6 print("猪在吃")
7 class Haski(Animal):
8 def chi(self):
9 print("哈士奇在吃")
10 class Alasika(Animal):
11 def chi(self):
12 print("阿拉斯加在吃")
13
14 class SiYangYuan:
15 def yanng_animal(self, ani): #本来这里的参数要的是Animal类的对象,但是传入Pig类,Haski类,Alasika类的对象也可以,这就是多态
16 ani.chi()
17
18 zhu = Pig()
19 erha = Haski()
20 ala = Alasika()
21 alex = SiYangYuan()
22 alex.yanng_animal(zhu)
23 alex.yanng_animal(erha)
24 alex.yanng_animal(ala)

多态的好处:

程序具有超高的可扩展性。

面向对象思想的核心与灵魂。

python自带多态,我们一直在用多态,但是感觉并不明显。 比如. 我们创建一个变量a = 10 , 我们知道此时a是整数类型。但是我们可以通过程序让a = "alex", 这时, a又变成了字符串类型。

python学习10-内置函数 迭代 二分法/面向对象初识(转载)的更多相关文章

  1. python学习交流 - 内置函数使用方法和应用举例

    内置函数 python提供了68个内置函数,在使用过程中用户不再需要定义函数来实现内置函数支持的功能.更重要的是内置函数的算法是经过python作者优化的,并且部分是使用c语言实现,通常来说使用内置函 ...

  2. python 小兵(10)内置函数

    内置函数(下午讲解) 什么是内置函数?就是python帮我们提供的一个工具,拿过直接用就行,比如我们的print,input,type,id等等.截止到python3.6.2版本 中一共提供了68个内 ...

  3. Python学习之==>内置函数、列表生成式、三元表达式

    一.内置函数 所谓内置函数就是Python自带的函数 print(all([0,2,3,4])) #判断可迭代的对象里面的值是否都为真 print(any([0,1,2,3,4])) #判断可迭代的对 ...

  4. python学习总结----内置函数及数据持久化

    抽象基类(了解) - 说明: - 抽象基类就是为了统一接口而存在的 - 它不能进行实例化 - 继承自抽象类的子类必须实现抽象基类的抽象方法 - 示例: from abc import ABC, abs ...

  5. python学习-31 内置函数

    内置函数 1.abs()  绝对值 2.all()    判断列表里的所有值的布尔值(如果迭代列表里的每个值后都是True 则返回True) '])) 运行结果: True Process finis ...

  6. python学习之--内置函数:

    Python内置函数: Python内置了很多有用的函数,我们可以直接调用.要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数. 1. 内置函数调用之--abs()函数: ...

  7. Python学习(5)——内置函数

    常用字符串内置函数 1)str.count() //返回该字符串中某个子串出现的次数 2)str.find() //返回某个子串出现在该字符串的起始位置 3)str.lower() //将该字符串全部 ...

  8. python学习-34 内置函数的补充

    其他内置函数 1.ord()    与chr()相反 2.pow() print(pow(3,3)) # 相当于3**3 print(pow(3,3,2)) # 相当于3*3%2 运行结果: 27 1 ...

  9. python学习之- 内置函数

    内置方法:1:abs():取绝对值2:all():当可迭代对象里所有均为真时结果为真. all([1,2,3])3:any():当可迭代对象里任意一个数据为真结果即为真.any([0,1,2])4:a ...

随机推荐

  1. Mybaties原理图

  2. 命令之 ulimit

    help ulimit help ulimit ulimit: ulimit [-SHacdefilmnpqrstuvx] [limit] Modify shell resource limits. ...

  3. wc.exe C++实现

    目录 Github项目地址 PSP表格 解题思路 设计实现过程 测试运行 项目小结 Github项目地址 wc-project PSP表格 PSP2.1 Personal Software Proce ...

  4. 【转】android 布局优化

    前言 本篇文章为Android优化的布局部分,该部分应该是Android中很重要的,无论是在自定义控件中,还是在简单的书写布局时,都应该尽量遵循一些优化原则,这样布局的绘制效率才会更高,体验才能更好. ...

  5. WebApi跨域问题解决

    因为第一次用webapi,并且还是前后台分离,所以设置到了跨域,在百度上找了很多解决办法,但是基本都存在缺陷,我这里分享一下我自己的经验 1.首先配置Web.config 这样配置发布到服务器就可以跨 ...

  6. 让IE播放PPT

    在win7下安装office 2003,想让ppt在ie里播放,然后供winform调用,显示并播放ppt,操作如下 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Power ...

  7. MySql8.0后密码认证方式问题[caching-sha2-password]

    这个问题通常在laravel中表现为类似下边的异常: local.ERROR: SQLSTATE[HY000] [2006] MySQL server has gone away {"exc ...

  8. 个人JS体系整理(三)

    一. 严格模式 JavaScript 严格模式(strict mode)即在严格的条件下运行.首先声明,严格模式是ES5中提出来的,准确来说就是一句指令Use strict,它的目的是指定代码在严格条 ...

  9. 【03】循序渐进学 docker:基础命令

    写在前面的话 之前谈了啥是 docker 和怎么安装 docker,这里就谈谈 docker 命令的使用,当然,这里的使用可能只是局限于 docker 的增删查改. 另外需要注意的是,为了图片的美观, ...

  10. 金庸笔下的"程序员" | 附金庸武侠全集

    金庸 飞雪连天射白鹿,笑书神侠倚碧鸳当您八十高龄取得牛津大学唐朝史学博士学位,我还以为这是另一部史诗开始的信号,然而没有后续了.我的高中到大学,是十遍<笑傲江湖>的距离,我的整个青春,是大 ...