python学习【第四篇】python函数 (一)

2018-06-18 02:32:52来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

一、函数的介绍

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

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

函数的好处:

  • 代码重用
  • 保持一致,易于维护
  • 可扩展性

二、函数的定义

函数的定义规则:

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

函数的语法:

  

def 函数名:
    函数体

  

函数的示例:

def print_hello():
    """
    打印hello
    :return: 
    """
    print("hello")

  

三、函数的返回值

根据示例来看下python的返回值:

def fun2():
    msg = "hello world"
    return msg


def fun3():
    return 1, 2 ,3 

aa = fun1()
bb = fun2()
cc = fun3()
print(aa)
print(bb)
print(cc)

# 输出结果:
# None
# hello world
# (1, 2, 3)

总结:

  1.函数中如果没有return语句返回,那么python函数会默认返回None

  2.函数返回值数为0,函数默认返回None;函数返回值数为1是,则返回object;返回值数大于1时,则返回的是一个tuple;

 

四、函数的参数

 函数参数的原则:

  • 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
  • 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
  • 位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)
  • 默认参数
  • 参数组

普通参数

def fun1(name):   # name为形式参数
    print(name)


aa = "hello"
fun1(aa)  # aa为实参

  

默认参数

def func(name, age=18):
    print("%s:%s" % (name, age))


# 指定参数
func('wupeiqi', 19)  # 使用默认参数
func('alex')
# 注:默认参数需要放在参数列表最后

 

动态参数

def func1(*args):
    print(args)

# 执行方式一
func1(11, 33, 4, 4454, 5)
# 执行方式二
li = [11, 2, 2, 3, 3, 4, 54]
func1(*li)


def func2(**kwargs):
    print(kwargs)
# 执行方式一
func2(name='wupeiqi', age=18)
# 执行方式二
dict1 = {'name': 'fyh', "age": 18, 'gender': 'male'}
func2(**dict1)

 

万能参数

# 万能参数
def func(*args, **kwargs):
    pass

 

五、全局变量与局部变量

全局变量与局部变量的本质在于作用域的不同

全局变量说白了就是在整个py文件中声明,全局范围内都可以使用

局部变量是在某个函数内声明的,只能在函数内部使用

 

举例:

def fun1():
    name = "aa"

print(name)

 

执行结果:

  

报错的原因:试图访问局部变量而报的错

 

局部变量与全局变量变量名一样

  • 全局变量与局部变量名一致,函数内部会优先使用局部变量
  • 修改局部变量不会影响到全局变量
name = "bb"

def print_name(): name = "aa" print(name) print_name()

print(name) # 打印的结果为
# aa
# bb

 

global关键字

使用global关键字:则会告诉python编译器,这个变量是全局变量而不是全局变量,这样在函数体内修改变量会影响全局了

name = "bb"


def print_name():
    global name
    name = "aa"
    print(name)

print_name()
print(name)

# 打印的结果:
# aa
# aa

  

nonlocal关键字

nonlocal关键字在python3中新出现的关键字,作用:用来在函数或其他作用域中使用外层(非全局)变量

nonlocal  适用于在局部函数 中 的局部函数, 把最内层的局部 变量设置成外层局部可用,但是还不是全局的。

注:nonlocal必须要绑定局部变量

def fun1():
    num = 1

    def fun2():
        nonlocal num    # 此处不能使用global,只能使用nonlocal
        num += 1
        return num
    return fun2

aa = fun1()

print(aa())

  

六、匿名函数

lamba函数也叫匿名函数,即函数没有具体的名称

lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值

def calc(x):
    return x + 1

# 用lambda进行改写如下:
calc2 = lambda x: x + 1
# 进行调用
print(calc2(10))

  

七、初识高阶函数

map函数

map处理序列中的每个元素,得到一个结果(迭代器),该迭代器元素个数与位置不变
list1 = [1, 2, 3, 4, 5]
list2 = map(lambda x: x+1, list1)  # map的第一个参数为函数,后面的参数为可迭代对象
print(list(list2))

# 结果:[2, 3, 4, 5, 6]

  

filter函数

filter(过滤):遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来,组成新的迭代器
list1 = ["1111aaa", "2222aaa", "3333aaa", "4444", "5555", "6666"]
list2 = filter(lambda x: x.endswith("aaa"), list1)  # 有过滤的作用
print(list(list2))

# 运行结果:['1111aaa', '2222aaa', '3333aaa']

  

reduce函数

reduce 处理一个序列,把序列进行合并操作
from functools import reduce

list1 = [1, 2, 3, 4, 5]
aa = reduce(lambda x, y: x+y, list1)  # 前一个参数的函数必须是两个参数
print(aa)

# 运行结果:15

  

八、内置函数

学习资料参考:https://docs.python.org/3/library/functions.html?highlight=built#ascii

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:python3全栈开发-什么是粘包、粘包现象、如何解决粘包

下一篇:第五章—if语句