python基础第三篇

时间:2021-05-08 20:06:11

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基础第三篇

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