day 06

 函数是编程语言中十分重要的一环。它的特点是封装语句,省去大量重复代码。

1. 函数的定义:
def func_name(参数1,2...):
    "函数底下第一行写一个str会作为函数的文档DocStrings"
    print("hello world!")

print("hello again!")
# 函数底下缩进一个TAB的都是函数的代码块
 按照语法就定义了一个函数,函数名为 func_name。 调用时输入: func_name(需要输入的参数) 进行调用。

 使用: func_name.__doc__ 即可调用函数的DocStrings,一般用作为阐述函数的功能。

 2. 函数的参数传递:

 参数传递有两种方式:一是值传递,将参数复制一份副本(堆和栈中都复制)传入函数内,函数内部修改的数据

 实际上是复制的副本,原参数不会受到影响;
a = [1,2,3]
def foo(x):
    x[1] = 10
foo(a)  # 调用函数
print(a) >> [1,2,3] 仍为原值
 
 另一种是 引用传递 , 将参数本身传入函数中进行数据操作,只适用于 list,dict等可变量。值得注意的是,要使用引用传递,

必须要在参数中把可变量的值写进去,如果只是传入一个变量,则还是值传递:

def foo(x):
    x.pop()
    return x
# 引用传递
print(foo([1,2,3])) >> [1,2]

# 值传递
l = [1,2,3]
foo(l)
print(l) >> [1,2,3]  仍为原值
3. 函数的几种参数

函数有 5 种参数,必选参数,默认参数,可变参数,关键字参数,命名关键字参数。

必选参数,就是普通的参数。
默认参数,调用时可省略,会有一个默认值。语法是加个 = x
def foo(a,b=2,c=3):
    pass
# b,c 是默认参数
 可变参数,可传入任意个参数,自动组成一个 tuple。语法是 *参数,也可直接调用时 *list
def foo(*sdf):
    pass
foo(1,2,3,3,4,4,2,32) #组成元组传入函数内

l = [1,2,3,4]
foo(*l)  #将list每个值取出,组成元组。
 关键字参数,**kw(固定语法) 可传入 任意个 等号键值对(a=2,键不需要引号) 的参数,组成一个字典传入函数,类似,
可以调用时 **dict 传入字典内所有内容。
def foo(**kw):
    pass
foo(name="sd",age=18)

d = {"name":"dsf","age":20}
foo(**d)
 命名关键字,foo(a,b,*,name,age) 用一个星号,星号后面的都是命名关键字参数。仍然可以输入任意的 等号键值对 ,

相当于从中筛选出 name, age 两个键值对,没什么用。同时定义时,星号后的可以写成默认参数。
def foo(a,b,*,name="pop",age=20):
    pass

foo(a,b) # 默认值补上
foo(a,b,name="sdf",class="ed",age=30)
# class 被忽略


5. 全局变量

在外部创建的变量为全局变量,作用域为全部。函数内部定义的变量为局部变量,作用域仅限于函数内。如果想在函数内

使用全局变量,直接使用,但是不能赋值,由于python的创建变量机制,解释器会认为是在函数内创建一个新的变量。

解决方法 global 变量名,声明使用的是全局变量。建议定义全局变量写 g_变量名。
a = 21
def foo():
    global a
    a = 30
print(a) >> 30
6. 匿名函数

适用于简单的函数(只有一行表达式的函数),用完就删。
lambda x,y:x+y

冒号前为参数,冒号后为返回值
lambda是固定语法

7. 高级函数

map: map(function, iterable)
将可迭代对象中的每一个元素都执行一次function

reduce: python3 整合进了 functools 模块,需要引入

  reduce(function, iterable)
 有个要求,函数是要能接受两个参数的函数。作用:将可迭代对象中的头两个元素执行函数,函数返回值和第三个元素
作为参数再执行函数,如此直到结束。

filter 过滤器,filter(function, iterable) 将函数作用于每个元素,根据返回值是True保留或者False去掉元素。返回一个生成器
 
sorted: 排序算法
  sorted(序列,key) 将元素按ASCII码排序,返回从小到大的列表。也可加入排序规则key, key = 函数,会将每个元素

作用一次函数,得到的返回值组成一个keys列表,再对keys列表排序,最后按相应的顺序对原序列排序。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值