Python函数

2021/11/4 22:15:55

本文主要是介绍Python函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  • 函数代码块以def关键词开头,后接函数标识符名称和圆括号( )标识符对应的是内存地址
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
  • 函数的第一行语句可以选择性地使用文档字符串-用于存放函数说明
  • 函数内容以冒号起始,并且缩进
  • return[表达式]结束函数,选择性地返回一个值给调用方。不带表达式地return相当于返回None  Python可以return多个值

带参函数

形参和实参

可变对象和不可变对象

  • 不可变对象如strings,tuples,numbers,传参数的时候是值传递
  • 可变对象如list,dict,传参数的时候是地址传递

不可变对象值传递,所以不影响x,y

 可变对象地址传递,所以会直接处理原地址对应的内存,一边做修改,另一边也会被修改,因为两边对应的是同一块内存  (可变对象与不可变对象其它语言也会有类似的,c没有,c直接传的是指针,速度更快)

参数

  • 必需参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时一样(必需参数对于所有的语言都有,只要有函数就会有)

  • 关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。(关键字参数对于所有的三代语言(即面向对象的语言,c++,python,java等)都有)

  •  默认参数

在定义函数时,给函数的参数一个默认值,调用函数时,如果没有传递参数,则会使用默认参数。

要求带有默认值的参数放在所有参数的后面(所有语言都是这样要求的)

def shu(a,b,c,d=1):
  •  不定长参数

如果需要一个函数处理比当初声明时更多的参数。这些参数叫做不定长参数,不定长参数没有值,和上述的参数不同,声明时不会命名, print( )就是一个不定长参数

加了星号(*)的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组(元组即说明这是一个序列,序列即说明可以进行for循环遍历)。我们也可以不向函数传递未命名的变量。

 匿名函数

​​​​​​(18条消息) 关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解_测试不将就-CSDN博客_lambda

 lambda argument_list: expression

  • argument_list(参数列表)可以是 ①a, b ②a=1, b=2③*args④ a, b=1, *args 等
  • expression(表达式)可以是①1 ②None ③a + b ④sum(a) ⑤1 if a >10 else 0等
sum=lambda x: print(x)
sum(100)
#输出是100

注:部分Python内置函数接收lamda函数作为参数。

  • filter函数。此时lambda函数用于指定过滤列表元素的条件。例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。
  • sorted函数。此时lambda函数用于指定对列表中所有元素进行排序的准则。例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。
  • map函数。此时lambda函数用于指定对列表中每一个元素的共同操作。例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。
  • reduce函数。此时lambda函数用于指定列表中两两相邻元素的结合条件。例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。

return语句

return[表达式]语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的retrun语句返回None。

  •  jisuan函数没有返回值return,所以print(jisuan)出来是None
  • Python元组只要有一个元素时,后面要加逗号','

 

  •  return可以返回多个值
  • return返回的多个值以元组形式输出
  • return返回的数据类型可以是不同类型

变量作用域

(18条消息) [Python小记] 通俗的理解闭包 闭包能帮我们做什么?_Rei的博客-CSDN博客_python 闭包

python的作用域一共有4种,分别是:

  • L(Local)局部作用域 (全局调用了一个函数,这个函数就是局部)
  • E(Enclosing)闭包函数外的函数中 (闭包是指函数里再写的一个函数)
  • G(Global)全局作用域  (写的代码,定义的py文件)
  • B(Built-in)内建作用域 (只要python一运行,就会有内建)

以L  E G B的规则查找,即:在局部找不到,便去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找 绝不允许按照BGEL查找

 ???在某个范围内,就可以对某个范围进行直接访问,绝不允许跨区域向外访问,不允许不可变类型由外向内访问(只能将外部变量对于内部变量进行值赋值,相当于新建了一块内存,两者之间互不相关)允许可变类型由外向内访问(相当于内部变量在本地声明了一个标识符,标识符不在本地用内存,标识符指向了外部的内存)

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

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了(对于的是不可变类型 可变类型不需要)

global 是全局标识符,是当前嵌套的根

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

类型转换

 序列操作

 

 关于zip( )函数:可以将两个列表组合成一个字典

 

 


 

 



这篇关于Python函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程