专栏名称: 马哥Linux运维
马哥linux致力于linux运维培训,连续多年排名第一,订阅者可免费获得学习机会和相关Linux独家实战资料!
目录
相关文章推荐
运维  ·  再见,CDN 巨头:Akamai 宣布 ... ·  2 天前  
51好读  ›  专栏  ›  马哥Linux运维

最全 Python3 函数知识点大全

马哥Linux运维  · 公众号  · 运维  · 2019-02-23 22:00

正文

作者:枫叶云

来源:见文末

Python 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但也可以自己创建函数,这被叫做用户自定义函数。

1.函数的定义:

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。

  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

  • 函数内容以冒号起始,并且缩进。

  • pass 关键字,代表什么都不干

  • exit(num)   强行退出(num:是一个数字,显示为退出码)

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

语法


def functionname( parameters ):
  function_suite
  return [expression]


默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。

举例1:

def add(x, y):
print(“x = {0}”.format(x))
print(“x = {0}”.format(x))
print(“x  + y  = {0}”.format(x+y))
return x+y


举例2:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/14 20:31
# @Author  : Feng Xiaoqing
# @File    : demo1.py
# @Function: -----------


def f(x,l=[]):
   for i in range(x):
       l.append(i*i)
   print(l)

#
f(2) = f(2, l=[])

f(2)
# 结果:[0, 1]

f(3,[3,2,1])
# 结果: [3, 2, 1, 0, 1, 4]

f(x=3, l=[])
# 结果: [0, 1, 4]


运行结果:

[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 4]


2.函数的调用

定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。

如下实例调用了add()函数:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/15 21:01
# @Author  : Feng Xiaoqing
# @File    : demo2.py
# @Function: -----------

# 自定义加法函数add()
def add(x,y):
   print("{0} + {1} = {2}".format(x,y,x+y))
   return
   print("finished")   #在return后不会执行这条语句


# 调用函数,计算2+3的得数
add(2,3)


运行结果:

2 + 3 = 5


3.函数的参数

形式参数和实际参数

在定义函数时,函数名后面,括号中的变量名称叫做形式参数,或者称为"形参"

在调用函数时,函数名后面,括号中的变量名称叫做实际参数,或者称为"实参"

def fun(x,y):  //形参
   printx + y
   fun(1,2)     //实参
   3
   fun('a','b')
   ab


函数默认参数:

缺省参数(默认参数)

def fun(x,y=100)    
 print x,y

#调用:
fun(1,2)
fun(1)


定义:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def fun(x=2,y=3):
 print x+y


调用:

fun()
#结果:
5

fun(23)
#结果
26

fun(11,22)
#结果:
33


我们经常在看别人的代码中,经常出现def(*args, **kwargs)这样的表现形式:

*args             指的是:tuple  (1, )
**kwargs       指的是:dict   {“k”: “v”}

fun(*args, **keargs)
fun(1, 2, 3 , 4, 5, a=10, b=40)


4.函数的返回值

函数返回值:

函数被调用后会返回一个指定的值

函数调用后默认返回None

return返回值

返回值可以是任意类型

return执行后,函数终止

return与print区别

#!/usr/bin/env python
# -*- coding:utf-8 -*-
def fun():
 print 'hello world'
 return 'ok'
 print 123

fun()

#结果
hello world
123
None


5.函数的变量

局部变量和全局变量:

Python中的任何变量都有特定的作用域

在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量

在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量。

def fun():
  x=100
  print x

fun()
x = 100

def fun():
  global x   //声明
  x +=1
  print x

fun()
print x


外部变量被改(x由100改为101):

x = 100

def fun():
 global x
 x += 1
 print (x)

fun()
print (x)

#结果
101
101


内部变量外部也可用:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/15 21:33
# @Author  : Feng Xiaoqing
# @File    : demo2.py
# @Function: -----------

x = 100

def fun():
   global x
   x +=1
   global y
   y = 1
   print(x)

fun()
print(x)
print(y)

#结果:
101
101
1


统计程序中的变量,返回的是个字典

#!/usr/bin/env python
# -*- coding:utf-8 -*-

x = 100
def fun():
   x = 1
   y = 1
   print(locals())

fun()
print (locals())


结果:

{'y': 1, 'x': 1}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.sourcefileloader object at class="hljs-default-number" style="color: rgb(209, 154, 102);background: rgba(0, 0, 0, 0);display: inline;width: 66px;text-decoration: none solid rgb(209, 154, 102);font-weight: 400;font-style: normal;">0x02FF6390>, '__spec__': None, '__annotations__': {}, '__builtins__': 'builtins' (built-in)>, '__file__': 'D:/PycharmProjects/PythonLive/untitled/day07/demo2.py', '__cached__': None, 'x': 100, 'fun': 0x052D2390>}


6.匿名函数

顾名思义就是没有名字的函数,那为什么要设立匿名函数,他有什么作用呢?
lambda 函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方

python 使用 lambda 来创建匿名函数。

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

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

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

  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。


语法

lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression


举例:

求两数的乘积:

常规写法:

def fun(x,y)
 return x*y


lambda版本写法:

r = lambda x,y:x*y


7.高阶函数

(1)map(f, list)

返回每个元素通过f计算完的value的list

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

举例:计算列表里值的平方

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def f(x):
   return x*x

for i in map(f,[1,2,3,4,5,6,7]):
   print(i)


结果:

1
4
9
16
25
36
49







请到「今天看啥」查看全文