2021-06-23 Python快速学习4(函数,全局变量)

本文详细介绍了Python函数的定义,包括有无参数、默认值、不定长参数和关键字参数的使用。同时,讲解了匿名函数lambda、高阶函数如filter、map和reduce的应用,以及函数的返回值和变量作用域。通过实例展示了如何在实际编程中灵活运用这些概念。
摘要由CSDN通过智能技术生成


定义函数:

def  函数名(参数列表):
    函数体

函数返回值:如果函数体中有return,则函数有返回值。可以不return。

有函数名的函数

无参函数

含参列表为空。
打印’’’

def print_hello():
    print("Hello World!")
print_hello()
---------------------
运行结果
Hello World!

带参函数

不可变参数列表

  • 无默认值
    在调用函数的时候必须传入对应的值,否则报错。
def add(a,b):
    print(a+b)

add(1,2)
---------------------
运行结果
3
  • 有默认值
    在调用函数的过程中可以只传入不含默认值的列表参数。
    1> def f1(a,b,c=1),那么当调用函数f1(3,2),表示a=3,b=2,c=1
    2> def f1(a,b,c=1),那么当调用函数f1(3,2,5),表示a=3,b=2,c=5
    :一般把带默认值的参数放在最后面。
def add(a,b,c=6):
    print(sum([a,b,c]))

add(1,2,10)
---------------------
运行结果
13

不定长位置参数

可以接收任意数量的参数

def func(*list):
   return sum(list)

print(func(5, 6, 8))
---------------------
运行结果
19

不定长关键字参数

当不知道传递给函数什么信息的时候,需要将函数编写成能够接受任意数量的键值对。

def print_score(**stu_score):
   print(stu_score)

print_score(chinese=90, math=80, english=100)
运行结果
{'chinese': 90, 'math': 80, 'english': 100}

形参类型声明

在Python3.5以后可以显式的声明参数的类型,例如:

def statistic_info(name: str, age: int = 18, *books, **scores) -> None:
    print("姓名", name)
    print("年龄", age)
    print("图书", books)
    print("成绩", scores)

statistic_info("韩梅梅", 19, "水浒传", "西游记", "红楼梦", chinese=90, math=80, english=100)
#标记age为int类型,但是不强制要求。当age为字符串"19"也可以执行
---------------------
运行结果
姓名 韩梅梅
年龄 19
图书 ('水浒传', '西游记', '红楼梦')
成绩 {'chinese': 90, 'math': 80, 'english': 100}

匿名函数lambda

在编程的过程中,需要重复使用的函数一般会使用def 命名函数,但有时候我们不必要使用函数的名字,也就是说这个函数是一次性的,此时我们可以用lambda来创建匿名函数。
优点:使用lambda创建匿名函数不需要函数名,并且没有return语句,使得匿名函数更加简洁,更加高效。(可以预定义函数一起使用)

  • 语法:
lambda 参数列表:简单函数体(仅一个表达式,不含条件判断和循环)
  • 示例
  1. lambda基本使用方式
#一般函数
def my_func(x):
    return x * x
print(my_func(3))
#Lambda函数
lam = lambda x,y: x*y
print(lam(3,7))
---------------------
运行结果
9
21
  1. lambda与预定义函数结合
  • lambda+map
    map():将给定的列表的值依次在所定义的函数关系中迭代并返回一个新列表
  • lambda+filter
    filter():根据一定的条件对给定的列表进行过滤
  • lambda+reduce
    reduce():对参数序列中元素进行累积
from functools import reduce

mylist=[1,3,5,10,10,11,24,55,55]
#剔除偶数
fil=filter(lambda x:x%2==1,mylist)
print(list(fil))
#累积和
red=reduce(lambda x,y:x+y,mylist)
print(red)
#翻倍
ma=map(lambda x:2*x,mylist)
print(list(ma))
---------------------
运行结果
[1, 3, 5, 11, 55, 55]
174
[2, 6, 10, 20, 20, 22, 48, 110, 110]

高阶函数

在上一个章节中已经可以感受到高阶函数的用法

  • filter():返回迭代器
    function中只允许一个值。
filter(function(),list)
  • map():返回迭代器
map(function(),list)
  • reduce():返回一个数
reduce(function(),list)

函数返回值

  1. 无返回值
def Hello():
    print("Hello")
Hello()
---------------------
运行结果
Hello
  1. 单个返回值
def Hello():
    return "Hello"
str = Hello()
print(str)
---------------------
运行结果
Hello
  1. 多个返回值
def Hello():
    name="Bob"
    str="Hello"
    return name,str

name,str=Hello()
print(name+":"+str)
---------------------
运行结果
Bob:Hello

变量

  • 全局变量的获取
    函数都可以直接获取全局变量
a=3
def f1():
    print("f1():"+str(a))
def f2():
    print("f2():"+str(a))

f1()
f2()
---------------------
运行结果
f1():3
f2():3
  • 全局变量的修改
  1. (失败)直接在f1()中修改是不行的,这时候相当于创建了一个局部变量a并且赋值为300,此时f1()调用的a都是局部变量。
a=3
def f1():
    a=300
    print("f1():"+str(a))
def f2():
    print("f2():"+str(a))

f1()
f2()
---------------------
运行结果
f1():300
f2():3
  1. (成功)global 先声明a是使用的全局变量的a,此时修改a的值,其他函数获取的a则为修改后的a
a=3
def f1():
    global a
    a=300
    print("f1():"+str(a))
def f2():
    print("f2():"+str(a))

f1()
f2()
---------------------
运行结果
f1():300
f2():300
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值