python基础语言法则_python语言基础3

一:python函数

是组织好的,可重复使用的,用来实现单一,或相关联功能的代码块。以前使用过的一些Python提供的内建函数,如print()、max(4,18)、min(100,50)。当然我们自己创建的函数,叫做自定义函数。

①、代码要遵循的原则:高内聚,低耦合

模块内部之间的联系,应该非常紧密的

模块与模块之间的联系,应该尽量少

②、优点:

函数能提高应用的模块性,和代码的重复利用率。

③、定义函数的场合:

凡是我们需要描述某个功能的时候,都将它定义为函数

④、函数定义规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。 函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。不写return,相当于返回 None。

⑤、定义函数格式:

def 函数名(参数列表):

函数体

函数调用:

函数不调用就不会执行,调用函数通过函数名完成

⑥、建议:

函数的第一行语句,可以选择性地使用文档字符串,用于存放函数说明,函数定义时,一个函数的功能要单一。

1、简单定义函数

#定义函数

def hello() :

print("Hello Python ...!")

#调用函数 函数不调用,不执行

hello()

运行结果:

Hello Python ...!

2、简单实现业务

#定义函数,实现打印5行5列的*号

def print_tr() :

for i in range(5):

for j in range(5):

print("* ",end="")

print()

#调用

print_tr()

运行结果:

* * * * *

* * * * *

* * * * *

* * * * *

* * * * *

3、在函数中,定义参数

函数是否需要未知数参与,需要可以用参数定义出来。

#计算两个数之和

#2个数是未知数,未知数相当于python的参数

def add(a,b):

#print('{0}+{1}={2}'.format(a,b,a+b))

print('%s+%s=%s'%(a,b,a+b))

#调用

add(7,8)

运行结果:

7+8=15

4、在函数中,指定返回值

return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的return相当于返回None。

#调addCopy01()函数,返回两个数之和的值

def addCopy01(a,b):

return a+b

#调用

result = addCopy01(100,200)

print(result)

print('-------------------------------')

#return 直接结束函数,'函数结束'提示,没有输出。

def test_method():

for i in range(10):

print(i)

return # return结束函数 break结束循环

print('函数结束')

#调用

test_method()

运行结果:

300

-------------------------------

0

5、参数类型

①、必需参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用函数,你必须传入参数,不然会出现语法错误:

#必须传入,2个参数

def addCopy01(a,b):

return a+b

#调用

addCopy01(100,200)

②、关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致:

#关键字参数:

def printinfo(name, age):

print("名字: ", name)

print("年龄: ", age)

#调用

printinfo(age=50, name="张三")

运行结果:

名字: 张三

年龄: 50

③、默认参数

调用函数时,如果没有传递参数,则会使用默认参数。

#默认参数:

def printinfo(name, age=35):

print("名字: ", name)

print("年龄: ", age)

#调用

printinfo(name="张三",age=50)

print("------------------------")

printinfo(name="张三")

运行结果:

名字: 张三

年龄: 50

------------------------

名字: 张三

年龄: 35

④、不定长参数

有时可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数。

加了星号(*)的参数名,会存放所有未命名的变量参数。如果在函数调用时,没有指定参数,它就是一个空元组。

#查看不定长参数,传入的值

def add2(a,*b):

print(a,end="")

print(b)

#调用

add2(1) #1()

add2(1,2) #1(2,)

add2(1,2,3) #1(2, 3)

print("------------------------")

#求和 [不限制几个参数]

def add3(a,*b):

sum = 0

for i in b:

sum += i

return a+sum

#调用

print(add3(1))

print(add3(1,2))

print(add3(1,2,3))

运行结果:

1()

1(2,)

1(2, 3)

------------------------

1

3

6

python 使用 lambda 来创建匿名函数。所谓匿名,意即不再使用 def 语句来定义一个函数。

①、lambda 函数的语法只包含一个语句

②、命名空间:python中存放变量名的空间或字典!

注意:

①、lambda 只是一个表达式,函数体比 def 简单很多。

②、 lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

③、 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

sum = lambda a,b:a+b

print(sum(10,20))

运行结果:

30

7、参数传递问题

①、对象是真实存在的数据,类型属于对象,变量是没有类型的。

number = [1,2,3,4,5,6]

info = "Hello"

解释:[1,2,3,4,5,6] 是 List 类型,“Hello” 是 String 类型,而变量number与info是没有类型,它仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象

②、可更改与不可更改对象

python 中一切都是对象,传递参数分为传不可变对象和传可变对象

python 中,string字符串,tuple元组,和numbers整数,是不可更改的对象,而list列表,dict字典等则是可以修改的对象。

使用函数的时候,如果传入参数是不可变的,那么参数里面对数据做的任何操作,都不会对函数外面的数据带来影响。不可变类型:如fun(a),传递的只是a 的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的新对象,不会影响 a 本身。

# 不可变类型参数传递

num = 1

def change(num):

num = 3 #没有对num操作,重新定义了一个num

print(num)

change(num)

print(num) #不会影响函数外,num本身的值

print('----------------------')

# 返回值例外

num2 = 1

def change(num2):

print(num2) # 1

num2 = 3

return num2

num_result = change(num2)

print(num_result) #返回值例外 3

print(num2) #函数内改变,不影响函数外的不可变对象 1

运行结果:

3

1

----------------------

1

3

1

可变对象类型:如 fun(la),则是将 la 真正的传过去,在函数内部,修改后,fun外部的la也会受影响

list_num = [1,2]

def change(list_num):

list_num.append(3)

print(list_num) #[1, 2, 3]

change(list_num)

print(list_num) #[1, 2, 3]

运行结果:

[1, 2, 3]

[1, 2, 3]

二:变量作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。

Python的作 用域一共有4种,从小到大分别是:

L (Local) 局部作用域

局部作用域,即函数中定义的变量

局部变量(只能在函数内部使用)

E (Enclosing) 闭包函数外的函数中

嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;

G (Global) 全局作用域

全局变量,就是模块(python文件)级别定义的变量;

定义在函数外的变量

B (Built-in) 内建作用域

系统固定模块里面的变量,比如int, bytearray等。

总结:以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找,内建中找不到程序报错

name = str('张三') #python内置的作用域 ->内建作用域

y = 2 #全局 ->全局作用域

def outer():

a = 3 #闭包 -> 闭包

def inner():

b=2 #局部 ->局部作用域

print(a)

inner()

#print(b) #报错

outer()

#print(a) #报错

运行结果:

3

1、作用域一

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域(有作用域的限制);其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。

# 实例中 msg 变量定义在 if 语句块中,但外部还是可以访问的。

if True:

msg = "ok"

print(msg)

# 实例中 msg 定义在函数中,则它就是局部变量,外部不能访问:

def test():

msg_inner = 'ok'

# print(msg_inner) #报错,无法访问局部变量

运行结果:

ok

2、作用域二

①、局部变量:定义在函数内部的变量拥有一个局部作用域,局部变量只能在其被声明的函数内部访问。

②、全局变量:定义在函数外的拥有全局作用域, 全局变量可以在整个程序范围内访问。

③、调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

total = 0

def sumcopyt(arg1,arg2):

total= arg1+arg2

print("局部变量",total) # 结果是:3而不是0(以 L –> E –> G –>B 的先后规则查找)

return total

sumcopyt(1,2)

print('全局变量',total)

运行结果:

局部变量 3

全局变量 0

3、作用域三

一个不在局部作用域里的变量默认是只读的,如果试图为其绑定一个新的值,python认为是在当前的局部作用域里创建一个新的变量,也就是说在当前局部作 用域中,如果直接使用外部作用域的变量,那么这个变量是只读的,不能修改。

global:通过里面的操作,改变外面的值

name='50'

def change_name():

name='100'

print('局部变量的值:',name)

change_name()

print('全局变量的值:',name) #全局的变量,并没有修改

print('--------------------------')

name2='50'

def change_name2():

#想让局部的total和全局的total变为同一个total(通过里面的操作,改变外面的值)

global name2

name2='100'

print('局部变量的值:',name2)

change_name2()

print('全局变量的值:',name2) #全局的变量,已经修改啦

运行结果:

局部变量的值:100

全局变量的值:50

--------------------------

局部变量的值:100

全局变量的值:100

4、作用域四

如果要修改嵌套作用域即闭包函数(enclosing 作用域,外层非全局作用域)中的变量则需要nonlocal关键字

def method_01():

a = 1

def method_02():

nonlocal a

a=2

print(a)

method_02()

print(a)

method_01()

运行结果:

2

2

三:Python内置函数

为了提高程序员的开发效率,Python 提供了很多可以直接拿来用的函数。

内容参考:http://www.runoob.com/python3/python3-built-in-functions.html

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

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

相关文章

一篇搞懂mysql中的索引(大白话版)

容易来说,索引的出现其实就是为了提升数据查询的效率,就像书的目录一样。一本 500 页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下,那我估计你可得找一会儿。同样,对于数据库的表而言&am…

sqlite插入时间字段_sqlite 获取最后插入id

(点击上方公众号,可快速关注)SQLite数据库中的表均有一个特殊的rowid字段,它是一个不重复的64位有符号整数,默认起始值为1。rowid别名为oid或_rowid_,但在创建表的SQL声明语句中只能使用rowid作为关键字。如果在创建表的时候设置了…

Dubbo与SpringCloud的架构与区别

Dubbo与SpringCloud的架构与区别 Dubbo架构图 SpringCloud 架构图 总结 框架DubboSpringCloud服务注册中心ZookeeperSpring Cloud Netfix Eureka(nacos)服务调用方式RPCREST API服务监控Dubbo-monitorSpring Boot Admin熔断器不完善Spring Cloud Netflix Hystrix服务网关无Sp…

php全局变量的关键字,php的static关键字和全局变量

1.全局变量[其不属于面向对象的思想,因为其放在对象之外的],面向对象有一个特点,其实封装的,php希望其所有的成员都应该放在类中;php的面向对象是基于面向对象的,不是纯粹面向对象的;也就是其可…

python实训目的意义_Python实训第二天--基础知识2

列表: 定义: 在[]内,可以存放多个任意类型的值, 并以逗号隔开。 一般用于存放学生的爱好,课堂的周期等等...# 定义一个学生列表,可存放多个学生 # list([张三, 李四, 王五, 赵六]) # students [张三, 李四, 王五, 赵六] # print(…

matlab求微分数值,用MATLAB语言求微积分方程的数值解.(xd^2y)/dx^2-5dy/dx+y=0y(0)=0y'(0)=0...

function dymyfun03(x,y)dyzeros(3,1) %初始化变量dydy(1)y(2); %dy(1)表示y的一阶导数,其等于y的第二列值dy(2)5/x*y(3)-y(1); %dy(2)表示y的二阶导数%ex0808 用ode23 ode45 ode113解多阶微分方程clear,clc[x23,y23]ode23(myfun03,[1,10],[1 10 30]);[x45,y45]ode45(myfun03,[…

springboot 接口404_资深架构带你学习Springboot集成普罗米修斯

这篇文章主要介绍了springboot集成普罗米修斯(Prometheus)的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!Prometheus 是一套开源的系统监控报警框…

http常见的状态码,400,401,403状态码分别代表什么?

2XX 成功 200 OK,表示从客户端发来的请求在服务器端被正确处理 204 No content,表示请求成功,但响应报文不含实体的主体部分 206 Partial Content,进行范围请求 3XX 重定向 301 moved permanently,永久性重定…

mysql left 数学原理,MySQL全面瓦解21(番外):一次深夜优化亿级数据分页的奇妙经历...

背景1月22号晚上10点半,下班后愉快的坐在在回家的地铁上,内心想着周末的生活怎么安排。sql忽然电话响了起来,一看是咱们的一个开发同窗,顿时紧张了起来,本周的版本已经发布过了,这时候打电话通常来讲是线上…

python网址太长_Python GUI-长链转短链

当我们想要与某人分享链接或将链接放入帖子时,如果链接太长,则会占用大量空间,而且非常缺乏吸引力。在这个时候,我们可以结束长链到短链的转换工具。当然,您可以直接搜索在线网站进行转换,但我们可以使用它…

java8中的map与flatmap区别

map:只能返回一个值 flatmap:返回多个值 new ArrayList().stream().map(x -> x);//返回一个 new ArrayList().stream().flatMap(x -> Arrays.asList(x.split(" ")).stream());//返回一个流,也就是多个值 看API声明可以发现,flatmap接受的参数是流…

matlab用高斯消元法解线性方程组,用matlab利用高斯消元法求解线性方程组

用matlab利用高斯消元法求解线性方程组Tag内容描述:1、用C语言编写软件完成以下任务:请用高斯列主元消元法解下列线性方程组:方法说明(以4阶为例):第1步消元在增广矩阵(A,b)第一列中找到绝对值最大的元素,将…

shell 文件路径有空格_Python学习第57课-shell入门之基本简单命令(一)

【每天几分钟,从零入门python编程的世界!】我们现在学习shell操作,对于shell的命令,我们就把它看做新的语言,shell语言,它是不同于其他编程语言的。就像我们学习一门编程语言,都是从打出“hell …

比较Spring AOP和AspectJ

1. 介绍 当前有多个可用的AOP库,这些库必须能够回答许多问题: 它与我现有的或新的应用程序兼容吗?在哪里可以实施AOP?它与我的应用程序集成的速度有多快?性能开销是多少? 在本文中,我们将着眼…

matlab中有哪些输出函数,MATLAB中查找并输出的函数有什么

程序如下:function Rusername(S)%S为用户名的字符串if ~isstr(S)error(Input argument is not string.);end%读取数据[Ad,At]xlsread(final exam-mini project-database.xlsx,Students);AAt(3:end,1:end);pisnan(Ad);pofind(p(1,:));Admat2cell(Ad,ones(1,size(Ad,1…

hough变换直线检测_python+opencv实现霍夫变换检测直线

作者:Ruff_XY功能:创建一个滑动条来控制检测直线的长度阈值,即大于该阈值的检测出来,小于该阈值的忽略 注意:这里用的函数是HoughLinesP而不是HoughLines,因为HoughLinesP直接给出了直线的断点,…

Java中replace、replaceAll和replaceFirst函数的用法小结

首先概述一下他们三个的用法: replace(CharSequence target, CharSequence replacement) ,用replacement替换所有的target,两个参数都是字符串。 replaceAll(String regex, String replacement) ,用replacement替换所有的rege…

php文件防删改,PHP实现增删改查以及防SQL注入

最近项目调研时,需要在集成板子上做个配置的网页,板子上装的是linux系统,配置信息在一个SQLite数据库中,经过讨论大家决定用PHP做这个网页。由于项目组没一个会PHP的,所以安排我调研下写个Demo,经过几天的研…

c# python 相互调用_【GhPython】Python如何使用“委托”和lambda表达式

【版权声明】| 作者:月之眼| 首发于大水牛参数化设计平台| 如需转载请联系作者| 如果觉得文章不错,欢迎分享 函数作为参数传入 在python中函数是能作为参数输入函数的。这个有点类似于C#中的委托,将一个函数封装到一个委托对象里,…

SpringAOP Aspect注解实现简单日志功能

SpringAOP实现简单日志功能 AOP(Aspect Oriented Programming):面向切面编程,Spring框架的重要组成部分,利用AOP我们可以将一些公用的业务逻辑部分抽取出来,动态的插入到程序中(如日志记录、权…