python函数参数学习_python函数学习

1、函数的定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。分为内置函数和用户自定义函数。

2、函数的创建规则:函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。

任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

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

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

函数的调用:定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,便可以通过另一个函数调用执行,也可以直接从Python提示符执行。

例如计算字符串长度:

无函数:

n=0

for c in "helloworld":

n = n + 1

print(n)

获取一个字符串长度是常用的功能,如果每次都写这样一段重复的代码,不但费时费力、容易出错,也很麻烦。可将此过程定义为一个函数便有:

#自定义 len() 函数

def my_len(str):

length = 0

for c in str:

length = length + 1

return length

#调用自定义的 my_len() 函数

length = my_len("helloworld")

print(length)

'''

在变量定义和函数名定义的时候,一定不可随便定义,要用清晰地英文组合表达出贴近的意思,突出函数的功能。

'''

注意:如果读者接触过其他编程语言中的函数,以上对于函数的描述,肯定不会陌生。

但需要注意的一点是,和其他编程语言中函数相同的是,Python 函数支持接收多个

参数,不同之处在于,Python 函数还支持返回多个值。

调用函数也就是执行函数。调用函数就相当于使用定义过的工具。

函数调用的基本语法格式如下所示:

[返回值] = 函数名([形参值])

其中,函数名即指的是要调用的函数的名称;形参值指的是当初创建函数时要求传入的各个形参的值。如果该函数有返回值,我们可以通过一个变量来接收该值,当然也可以不接受。

需要注意的是,创建函数有多少个形参,那么调用时就需要传入多少个值,且顺序必须和创建函数时一致。即便该函数没有参数,函数名后的小括号也不能省略。

函数的递归:

定义:在调用一个函数的过程中直接或间接的调用该函数本身,称之为递归调用。递归调用最多能调用999层。

简单:

def func():

print('A')

func()    #直接调用自身

func():

间接调用:

def func():

print('A')

bar()    #间接调用自身

def bar():

print("B")

func()

func()

这是个死循环过程,要加上适合的结束条件

总体来说:

递归分为两个重要的阶段: 递推+回溯

递推:函数不断减少问题规模直至最终的终止条件。

回溯:拿到最终明确的值后,返回给上次调用进行处理,直至初始层。

注意:

1、递归调用必须有一个明确的结束条件

2、在python中没有尾递归优化,递归调用的效率不高

3、进入下一次递归时,问题的规模必须降低

python类与对象

作为面向对象的编程语言,Python中一切皆对象(object),例如字符串、元祖、列表等都是对象。而类(class)则是描述具有相同属性(Arrtibute)和方法(MethoD)的对象的集合。

简单来说:对象=属性+方法

类=具有相同属性和方法的对象的集合

面向对象编程语言

- 类: 一个模板---是一个抽象的, 没有实体的

- 对象: (eg: 张三, 李四)

- 属性: (表示这类东西的特征, 眼睛, 嘴巴, 鼻子)

- 方法: (表示这类物体可以做的事情, eg: 吃饭, 睡觉,学习)

继承关系和实例关系:

----对象体系中有两种关系:继承体系和实例关系。

继承关系好比父子关系,子类继承于父类,并拥有自身及父类的方法和属性,同名的子类方法和属性将覆盖父类的方法和属性。实例关系则是一个抽象到具体的过程,实例是某个类中具体的个体的表示。

例子:

class human(object):

def __init__(self, name, age, gender):

# python解释器自动将对象传给self这个形参.

# 看self到底是什么东西?

# 将对象与该对象的属性绑定在一起.

# 调用对象的属性两种方式:

# - 张三.name

# - self.name

self.name = name # 属性

self.age = age # 属性

self.gender = gender # 属性

print(self) # 实质上是一个对象

# 方法(在类里面定义的函数, 叫做方法)

def eat(self):

print("%s 正在运动" %(self.name))

创建对象:张三 = human("张三", 10, 'male')

print("张三:", 张三)

类的私有属性与私有方法:

类的私有属性:

__private_attrs:

两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。

类的方法:

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。

self 的名字并不是规定死的(因为是形参),也可以使用 this,但是最好还是按照约定是用 self。

类的私有方法:

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,

不能在类地外部调用。self.__private_methods。

迭代器:

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

迭代器有两个基本的方法:iter() 和 next()。

list=[1,2,3,4]

it = iter(list) # 创建迭代器对象

for x in it:

print (x)

list=[1,2,3,4]

it = iter(list) # 创建迭代器对象

while True:

try:

print (next(it))

except StopIteration:

sys.exit()

创建一个迭代器

把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。类都有一个构造函数,Python 的构造函数为 __init__(), 它会在对象初始化的时候执行。

class MyNumbers:

def __iter__(self):

self.a = 1

return self

def __next__(self):

x = self.a

self.a += 1

return x

myclass = MyNumbers()

myiter = iter(myclass)

print(next(myiter))

print(next(myiter))

print(next(myiter))

print(next(myiter))

print(next(myiter))

输出的结果为1

2

3

4

5

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值