文章目录

  • 一、函数
  • 1、参数
  • (1)位置参数
  • (2)默认参数
  • (3)可变参数
  • (4)关键字参数
  • (5)命名关键字参数
  • 2.函数的定义和调用
  • 1.调用内部参数时,参数个数不对
  • 2.参数检查
  • 3.交作业---求一元二次方程的两个解
  • 4.交作业--递归函数之汉诺塔问题
  • 二、高级特性
  • 1.切片slice与迭代lteration
  • eg1排序练习
  • 2.列表生成式List Comprehensions
  • 3.生成器generator与迭代器
  • (1)生成器:
  • eg2迭代练习:杨辉三角
  • (2)迭代器
  • eg3迭代例子


一、函数

1、参数

(1)位置参数

def power (x):      #此处的x看做是位置参数
    return x*x

(2)默认参数

指向不可变对象。
eg

#计算任意数的任意次方
def power (x,n):
    s=1
        while n>0:
            n=n-1
            s=s*x
            return s

#上述的函数定义语句修改一下

def power(x,n=2)

# 此处的n=2就是一个默认参数

降低调用函数的难度
只有与默认参数不符的项才需提供额外信息

(3)可变参数

即传入参数的个数可变

#计算a^+b^+c^·······
def calc(*args):
    sum-0
    for n in args:
        sum=sum=n*n
    return sum

也可以一个已有的numbers 的list/tuple,用*numbers表示将这个list的所有元素作为可变参数传入

(4)关键字参数

接收后在函数内部组装成一个dict

(5)命名关键字参数

要限制关键字参数的名字,就可以用命名关键字参数。

2.函数的定义和调用

1.调用内部参数时,参数个数不对

python声明一个函数必须等于一个浮点数 python函数声明与定义_迭代

2.参数检查

(1)区分一下自己定义的函数 my_abs()和python的内部参数abs()的差别

(2)在自己定义的函数中增加一个内置函数进行参数检查

python声明一个函数必须等于一个浮点数 python函数声明与定义_生成器_02


接上图续

python声明一个函数必须等于一个浮点数 python函数声明与定义_迭代_03

3.交作业—求一元二次方程的两个解

(1)导入了math包,并使用了math内置函数

(2)定义函数时不要忘了return输出(函数执行完毕也没有return语句时,自动return None)

python声明一个函数必须等于一个浮点数 python函数声明与定义_生成器_04

4.交作业–递归函数之汉诺塔问题

python声明一个函数必须等于一个浮点数 python函数声明与定义_列表生成式_05

二、高级特性

1.切片slice与迭代lteration

python声明一个函数必须等于一个浮点数 python函数声明与定义_列表生成式_06

(1)当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行

(2)判断一个对象是可迭代对象?方法是通过collections模块的Iterable类型判断。

(3)默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。

python声明一个函数必须等于一个浮点数 python函数声明与定义_生成器_07

eg1排序练习

python声明一个函数必须等于一个浮点数 python函数声明与定义_生成器_08

2.列表生成式List Comprehensions

python声明一个函数必须等于一个浮点数 python函数声明与定义_生成器_09


1.函数isinstance()可以判断一个变量的类型,既可以用在Python内置的数据类型如str、list、dict,也可以用在我们自定义的类,它们本质上都是数据类型

isinstance(object, classinfo)

object – 实例对象。

classinfo – 可以是直接或间接类名、基本类型或者有它们组成的元组。

如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。

python声明一个函数必须等于一个浮点数 python函数声明与定义_列表生成式_10

2.

python声明一个函数必须等于一个浮点数 python函数声明与定义_迭代_11


3.在列表生成式内使用 if-else语句

在一个列表生成式中,for前面的if … else是表达式,而for后面的if是过滤条件,不能带else

#if 在前
x if x%2 ==0 else -x for x in range (1,11)
[-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
#if在后表示过滤
[x for x in range(1, 11) if x % 2 == 0]
[2, 4, 6, 8, 10]

3.生成器generator与迭代器

(1)生成器:

列表元素可按某种算法推算。

1.创建生成器的第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator

**2.创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。通过for循环来迭代g

3.generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误

python声明一个函数必须等于一个浮点数 python函数声明与定义_迭代_12


python声明一个函数必须等于一个浮点数 python函数声明与定义_生成器_13


4.创建generator的第二种方法:在函数定义中包含yield关键字,将print(x)看成yield(x)。变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

5.用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中。

python声明一个函数必须等于一个浮点数 python函数声明与定义_生成器_14

eg2迭代练习:杨辉三角

python声明一个函数必须等于一个浮点数 python函数声明与定义_列表生成式_15


python声明一个函数必须等于一个浮点数 python函数声明与定义_生成器_16


关于杨辉三角

(1)目前的理解,把yield L看成 print L,输出列表L中的每个元素

(2)主要难在如果表示下一行的数据,并且下一行的数据还是不断增加不断在求和的。也是受他人代码启发。

L = [1]+  [L[i]+L[i+1] for i in range(len(L)-1)]+   [1]  #除左右两边的[1]外,都是通过上个list里的元素两两相加而来,
                                                               #表达式为L[i]+L[i+1]两两相加的形式,L[0]+L[1]  L[1]+L[2] ... L[len(L)-1-1]+L[Len(L)-1]
                                                                 #range(len(L)-1)=[0,1,...,len(L)-1-1]

当L=[1,1]时,len(L)=2,range(2-1)=range(1)=(0),[L[0]+L[1]]=[1+1]=[2]
当L=[1,2,1]时,range(len(L)-1)=range(2)=(0,1),[L[0]+L[1]]=[1+2]=[3] [L[1]+L[2]]=[2+1]=[3]

L=[sum(i) for i in zip([0]+L,L+[0])]

sum()作为python内置函数,直接调用。
zip()也是内置函数,用作遍历。

(2)迭代器

太多概念性的东西不做赘述,暂时也还没理解,找到了一个评论区的例子。

eg3迭代例子

python声明一个函数必须等于一个浮点数 python函数声明与定义_生成器_17

python声明一个函数必须等于一个浮点数 python函数声明与定义_列表生成式_18

a=sorted(a,key=add)    #排序列表
#改成
a = sorted(a)    #会出现下图所示,自动排序

python声明一个函数必须等于一个浮点数 python函数声明与定义_列表生成式_19


此处再贴上关于上述修改后排序排好的原因。

1.sort() 是list的内置方法,只有list有 :sort(cmp=None, key=None, reverse=False)

2.sorted()方法是Python内置的,可以对所有可迭代的序列排序生成新的序列,只要可迭代就行,返回的都是一个list:sorted(iterable, cmp=None, key=None, reverse=False)

3.参数:

cmp:比较函数,比较什么参数由key决定。

key:用列表元素的某个属性或函数作为关键字。

reverse:排序规则,可以选择True或者False。

iterable:待排序的可迭代类型的容器

4.区别:

a.sort()修改待排序的列表内容,返回排序后的a;

sorted(a),返回一个新的列表,而对a不产生影响