python基础第三篇

python基础 (三)

真心觉得python这门语言是业界良心:

  • 函数语法与特性
  • 局部变量与参数
  • 返回值
  • 嵌套函数
  • 递归
  • 匿名函数
  • 高阶函数
  • 内置函数

一、函数语法与特性

函数:将一组语句的集合通过一个函数名封装起来,若想执行该函数,调用其函数名

一般语法:

def hello(*args,**kwargs):
    ...
    return ...

参数和返回值视情况而存在

特性:

  1. 减少重复代码
  2. 可扩展
  3. 易维护
二、 局部变量与参数

实参:在函数调用时,必须具有确定的值,以便传递给函数的形参,因此必须预先定义,可以是常量、变量、表达式、函数等

形参:只有在调用时才分配内存单元,结束后立即释放,因此只在函数内部有效

def test(x,y):#x,y是形参
    return x+y
a=test(w,z)#w,z是实参

下面介绍几种形参:

def actor_info(name,sex,magnum_opus,country="中国"):#country是默认参数
    print("""
    ----------{name} info-----------
    姓名: {name}
    性别: {sex}
    代表作: {magnum_opus}
    国籍: {country}""".format(name=name,sex=sex,magnum_opus=magnum_opus,country=country))

actor_info("赵丽颖","女","花千骨")

1、位置参数

按顺序依依传入。

actor_info("赵丽颖","女","花千骨")

2、关键参数

当给函数传参数时不想按顺序来,那么可以用指定参数名的关键参数,关键参数一定要在位置参数的后面不然就乱了,代码中magnum_opus和sex就是关键参数,不用考虑自身位置。

actor_info("赵丽颖",magnum_opus="花千骨",sex="女")

3、默认参数

这里country就是默认参数,调用时不需指定,若指定了就是指定的值,默认参数可看作特殊情况的位置参数,必须放在最后不打扰其他参数。

actor_info("赵丽颖","女","花千骨")

4、非固定参数

如果函数定义时不明确要传入多少参数,那么使用非固定参数。

args:将多传入的位置参数构造成一个元组。

def actor_info(name,*args,country="中国"):
    print("""
    ----------{name} info-----------
    姓名: {name}
    性别: {sex}
    代表作: {magnum_opus}
    国籍: {country}""".format(name=name,sex=args[0],magnum_opus=args[1],country=country))
actor_info("赵丽颖","女","花千骨")

**kwargs:将多传入的关键参数构造成一个字典。

def actor_info(name,*args,**kwargs):
    print(name,args,kwargs)
actor_info("赵丽颖","女",magnum_opus="花千骨",country="中国")
#输出
#赵丽颖 ('女',) {'country': '中国', 'magnum_opus': '花千骨'}

全局变量:在程序一开始就定义的变量称为全局变量,其作用域是整个程序
局部变量:在子程序中定义的变量称为局部变量,其作用域是定义该变量的子程序

局部变量:

age=48
print("你几岁啊")

def liar(age):
    age=18
    print("I am %s years old"%age)
liar(age)

print("其实真实年龄是%s"%age)

输出:

你几岁啊
I am 18 years old
其实真实年龄是48

因此当全局变量与局部变量同名时,在定义局部变量的子程序内,局部变量起作用,在其他地方都是全局变量起作用。

三、返回值

函数的执行结果可以用return语句返回。
pay attention please!

  1. 函数执行过程中遇到return语句立即停止并返回结果,表征函数的结束
  2. 若函数中未指定return,那么返回值为None
四 、嵌套函数

函数还能嵌套函数,嵌套的子函数不能被外部程序调用,它是局部变量

depth=3
def yangcong():
    depth=2
    def yangcong2():
        depth=1
        print("你正在剥第%s层洋葱"%depth)
    yangcong2()
    print("你正在剥第%s层洋葱"%depth)
yangcong()
print("你正在剥第%s层洋葱"%depth)

输出:

你正在剥第1层洋葱
你正在剥第2层洋葱
你正在剥第3层洋葱
五 、递归

嵌套函数是在函数中调用其他局部函数,那么在函数中调用自身就是递归函数。

def cal(n):
    if n==1:
        return n
    return n*cal(n-1)
cal(5)
#输出
#120

主要特性:

  1. 必须有一个明确的结束条件
  2. 每次进入更深一层递归,问题规模比前一次有所减少
  3. 函数调用是通过栈来实现的,每执行一个函数调用就会增加一层栈,函数返回结束时会减少一层栈,因此递归调用次数过多,会引起栈溢出

递归函数还可用于对有序列表二分查找:

num_list=[2,5,7,9,12,15,19,25,29,36,38,46,89]
def binary_search(num_list,num):
    if len(num_list)>1:
        mid=int(len(num_list)/2)
        if num_list[mid] == num:
            print("find it!")
        elif num_list[mid]>num:
            return binary_search(num_list[:mid],num)
        else:
            return binary_search(num_list[mid+1:],num)
    else:
        if num_list[0] == num:
            print("find it!")
        else:
            print("真是找不到啊!")
binary_search(num_list,9)
#输出
#find it!
六、匿名函数

匿名函数不要按照常规方式明确的取指定一个函数。

#常规定义
def test(n):
    return n*n
#匿名函数定义
test=lambda n:n*n

匿名函数需要和其他函数搭配使用,比如map函数:

data=map(lambda n:n*n,[5,4,6,3])
for i in data:
    print(i)
#输出
#25
#16
#36
#9
七、高阶函数

函数定义的参数中包含一个指向函数的变量,那么这个函数称作高阶函数。

def square(n):
    return n**2

def sub(a,b,func):
    return func(a)-func(b)
sub(5,3,square)
#输出
#16
八、内置函数

python解释器内含许多函数和数据类型。

内置函数列表

具体参考python官方网页:https://docs.python.org/3/library/functions.html?highlight=built#ascii

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值