【Python学习笔记】- 06 函数式编程

1 什么是函数

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

2 使用函数的好处

  • 减少重复代码
  • 程序容易扩展
  • 保持代码的一致性

3 如何定义一个函数

以def关键词开头,后接函数的标识符名称和 () 结尾

任何传入参数和变量必须放在括号内,括号内可以用于定义参数,

函数的第一行语句可以选择性的使用文档字符串作为函数说明。

函数内容以冒号开始,并且缩进

return [表达式] 结束函数,选择性的返回一个值给调用方,如果没有return相当于返回None

  • 语法
def 函数名(参数列表):
	函数体
  • 举例:
# 计算面积
def area(w,h):
	return w*h
def print_welcome(name):
	print("welcome",name)
print(area(4,5))
print_welcome("admin")

4 可更改与不更改的对象

在python中,string,tuples和numbers是不可更改的对象,而list,dict等则是可以修改的对象

**不可变类型:**变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a。

**可变类型:**变量赋值la=[1,2,3,4]后再赋值la[2]=5则是将list la的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

python中一切都是对象。

5 参数

5.1 可使用的参数:

  1. 必须参数
  2. 关键字参数
  3. 默认参数
  4. 不定长参数

5.1.1 必须参数

必须参数须以正确的顺序传入函数。调用时的数量必须和声明时一样。

def printme( str ):
   "打印任何传入的字符串"
   print (str);
   return;
 
#调用printme函数
printme();

5.1.2 关键字参数

函数调用使用关键字参数来确定传入的参数值

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为python解释器能够用参数名匹配参数值

5.1.3 默认参数

调用函数时,如果没有传递参数,则会使用默认参数。

def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print ("名字: ", name);
   print ("年龄: ", age);
   return;
 
#调用printinfo函数
printinfo( age=18, name="admin" )
print("--------------------")
printinfo(name="chenzhan")

5.1.4 不定长参数

处理比当初声明时更多的参数,这些参数叫做不定长参数。

不定长参数声明时不会命名。

语法:

def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

加了*号的变量名会存放所有未命名的变量参数,如果再函数调用时没有指定参数,它就是一个空元组。

def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   for var in vartuple:
      print (var)
   return
 
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )
#参数组
def test(*args):
print(args)
#*args:接收n个位置参数,转换成元组的形式
# **kwargs:接收n个关键字参数,转换成字典的方式

6 变量作用域

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。

6.1 Python的作用域共有4种,分别是:

  1. Local:局部作用域
  2. Enclosing:闭包函数外的函数中
  3. Global:全局作用域
  4. Built-in:内建作用域
x = int(2.9)  # 内建作用域
g_count = 0  # 全局作用域
def outer():
    o_count = 1  # 闭包函数外的函数中
    def inner():
        i_count = 2  # 局部作用域

Tips:只有模块、类以及函数才会引入新的作用域

6.2 全局变量&局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

total = 0; # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
    #返回2个参数的和."
    total = arg1 + arg2; # total在这里是局部变量.
    print ("函数内是局部变量 : ", total)
    return total;

#调用sum函数
sum( 10, 20 );
print ("函数外是全局变量 : ", total)

6.3 global和nonlocal关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了

num = 1
def fun1():
    global num  # 需要使用 global 关键字声明
    print(num) 
    num = 123
    print(num)
fun1()

修改嵌套作用域中的变量需要使用nonlocal关键字:

def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值