python基础之函数
一、函数的定义和使用
def 函数名(参数):
...
函数体
...
返回值
函数的定义主要有如下要点:
def:表示函数的关键字
函数名:函数的名称,日后根据函数名调用函数
函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等…
参数:为函数体提供数据
返回值:当函数执行完毕后,可以给调用者返回数据。
1、返回值
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
def 发送短信():
发送短信的代码...
if 发送成功:
return True
else:
return False
while True:
# 每次执行发送短信函数,都会将返回值自动赋值给result
# 之后,可以根据result来写日志,或重发等操作
result = 发送短信()
if result == False:
记录日志,短信发送失败...
2、参数
函数的有三种不同的参数:
①普通参数
# ***********定义函数***********
# name 叫做函数func的形式参数,简称:形参。形参不占用内存,函数执行后就会释放内存
def func(name):
print(name)
# ***********执行函数***********
# "tom" 叫做函数func的实际参数,简称:实参
func("tom")
②默认参数
# age=18就是默认参数。默认参数需要放在参数列表最后
def func(name, age=18):
print("%s:%s" % (name, age))
# 指定参数
func('tom', 19)
# age不传值,就使用默认参数age=18
func('alex')
输出的结果:
tom:19
alex:18
③动态参数
方式一:
# 1、*args 表示可以传一组值,传元组
def func(*args):
print(args)
# 执行方式一
func(11, 33, 4, 4454, 5)
# 执行方式二
li = [11, 2, 2, 3, 3, 4, 54]
func(*li)
方式二:
# 2、**kwargs传字典
def func(**kwargs):
print(kwargs)
# 执行方式一
func(name='tom', age=18)
# 执行方式二
k = {'name': 'jack', 'age': 18, 'gender': 'male'}
func(**k)
输出的结果:
{'name': 'tom', 'age': 18}
{'name': 'jack', 'age': 18, 'gender': 'male'}
方式三:
def func(*args, **kwargs):
print(args)
print(kwargs)
li = [11, 2, 2, 3, 3, 4, 54]
k = {'name': 'jack', 'age': 18, 'gender': 'male'}
func(*li, **k)
输出的结果:
(11, 2, 2, 3, 3, 4, 54)
{'name': 'jack', 'age': 18, 'gender': 'male'}
拓展:
如果有调用函数的时候,既有位置参数、又有关键字参数,那么位置参数必须 放在关键字参数前面。
比如:
def func(x, y, z, **kwargs):
print(x, y, z, kwargs)
func(1, 2, 3, a=4, b=5)
那么a=1, b=5 就是关键字参数,传值给**kwargs,会把a=4, b=5 转成字典的形式,即{“a”: 1, “b”: 5} ;
1, 2, 3 就是位置参数,传值给x, y, z。
二、使用函数的好处
①代码重用;
②保持一致性、易维护性;
③可扩展性;
三、风湿理论之函数即变量
函数即变量,函数名就是内存地址,函数体就是字符串,定义一个函数就是把函数放在内存中,随时可被调用。
程序是自上而下执行的,当我们定义一个函数的时候,函数没有被调用就不会运行其中的代码。
所以在定义函数的时候,其实就是把函数名作为内存地址,函数体当作字符串,存放到内存里,只有我们取调用它的时候,才会真正的去运行其中的代码。
四、函数的作用域
作用域,顾名思义就是作用范围,也被称为生存范围或者说存在的范围。
在函数外部声明的变量可以给当前代码块所有的函数使用对所有函数都有效,也成为“全局作用域”。
在函数内部声明的变量只能影响到变量所在函数体本身,无法从外部对函数内部的变量进行调用,被称“函数作用域”。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# 函数的作用域
name = 'lisi'
def foo():
name = 'wangwu'
def bar():
print(name) # 没有return, 默认返回 None
return bar # 返回bar的内存地址。 函数即变量,函数名就是内存地址,函数体就是字符串,定义一个函数就是把函数放在内存中,随时可被调用。
# a = foo() # 要输出一个函数的返回结果,可以将函数的执行结果赋值给一个变量,然后打印出来.这里得到的是bar的内存地址
# print(a)
# a() # 内存地址加() 即 bar() ,执行函数bar
res = foo()()
print(res)
输出的结果:
wangwu
None