Fork me on GitHub

python3 函数 定义函数与切片

   如果我们要计算一个圆的面积,就是3.14*r*r,如果每次就算,则每次都要写一遍,就很麻烦,所以有了函数,我们就可以通过调用函数的方法,直接使用就行了。

 这里我们可以访问   内置函数 — Python 3.10.6 文档    查看python的内置函数有哪些,也可以通过help(abs)查看abs函数的帮助信息。
>>> abs(10)
10
>>>abs(-20)
20
abs() 函数用于返回绝对值的

  在python中,定义一个函数使用def语句,依次写出函数名、括号、括号中的参数与冒号:,然后在缩进块中编写函数体,函数的返回值使用return语句返回。
def my_abs(x):
  if x >= 0:
    return ture
  else:
    return flase
  如果已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在改文件的当前目录下面启动python解释器,用 from abstest import my_abs来导入my_abs() 函数,注意abstest是文件名(不含.py扩展名):
  空函数
  如果要定义一个不做的空函数,可以用pass。

def nop():
  pass
pass什么都不做,但它有什么用呢?实际上它用来作为占位符,比如现在还没有想好要怎么写函数的代码,就可以先放一个pass,让代码能够运行起来。
  比如:               if age > = 18;
           pass
      这里如果缺少了pass,代码运行的时候就会有语法错误。

参数检查

 

 

 

返回多个值

 

 

 

小结:
  定义函数时,需要确定函数名和参数个数;如果有必要,可以先对函数的数据类型做检查;函数体内部可以用return随时返回函数结果,函数执行完毕也没有return语句时,自动return None。函数可以同时返回多个值,但其实就是以一个tuple。

函数的参数

  包括默认参数、可变参数和关键字参数。
位置参数:
可以把 power(x)修改为 power(x, n),用来计算 x^n

 

 

 

 默认参数:
新的power(x,n)函数定义没有问题,但是旧的代码因为缺少了一个参数无法被正常调用了。
这个时候,默认参数就派上用场了,由于我们经常计算x^2,所以,完全可以把第二个参数n的默认值设为2:
def power(x,n=2):
  s = 1
  while n>0:
    n=n-1
    s=s*x
  return s
而对于n > 2 的其他情况,就必须明确地传入n,比如power(5,3)

 

 

 调用enroll()函数只需要传入两个参数。

  如果要继续传入年龄、城市等信息怎么办?这样的话我们可以把年龄和城市设置为默认参数:

 

 

 定义默认参数要牢记一点:默认参数必须指向不变对象!

 

可变参数

但是,如果我们把number更改为*number的可变参数,在调用的时候就可以简化
  

    

 如果已经有一个list或者tuple,要调用一个可变参数的情况。

             上面这个写法是可行的,但是太繁琐了,如果在list或者tuple的前面加上一个*号,把list或tuple的元素变成可变参数传进入。

*nums表示把nums这个list的所有元素作为可变参数传进去。

 

 

     关键字参数有什么用?它可以扩展函数的功能。比如,在 person 函数里, 我们保证能接收到 name 和 age 这两个参数,但是,如果调用者愿意提供 更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了 用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这 个函数就能满足注册的需求。

 

 

  

命名关键字参数
  对于关键字参数,函数的调用者可以传入任意不受限制额关键字参数。
如果要限制关键字参数的名称,就可以用命名关键字参数,例如,只接受city和job作为关键字参数。这种方式定义的函数如下:
  def person(name, age, *, city, job):
      print(name,age,city,job)
和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。调用方式。

使用命名关键字参数时,要特别注意,*不是参数,而是特殊分隔符。如果缺少*,Python解释器将无法识别位置参数和命名关键字参数:
  如果缺少了*,python解释器就无法识别位置参数和命名关键字参数:
  def person(name,age,city,job):
    #缺少*,city 和 job 被视为位置参数
    pass参数组合

  在python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数、这5种参数都可以自由组合使用,除了可变参数和命名关键字参数的混合。但是注意,参数定义的顺序必须是:必选参数、默认参数、可变参数/命名关键字参数和关键字参数。
  比如定义一个函数,包含上述若干种参数:
def f1(a, b, c=0, *args, **kw):
  print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
        print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

 

在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。

 

 

 最神奇的是通过一个 tuple 和 dict,你也可以调用上述函数:

 

 

 要注意定义可变参数和关键字参数的语法:

 

 

 

递归函数
  如果一个函数在内部调用自身本身,这个函数就是递归函数。
例如,计算阶乘n!,可以使用函数fact(n)表示,可以看出。
fact(n)=n!=face(n-1)*n    只有n=1时候需要特殊处理。
于是,fact(n)用递归的方式写出来就是:
def fact(n):
  if n==1
    return 1
  return n*fact(n-1)
上面就是一个递归函数。


高级特性
掌握了Python的数据类型、语句和函数,基本上就可以编写出很多有用的程序了,比如狗仔一个1,3,5,7,9,,,99的列表,可以通过循环实现。
L=[]
N=1
while N <== 99
  L.append(N)
  N=N+2

 

切片
  取一个list或tuple的部分元素。
取前三个元素:L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
在字符串里面也提供了很多截取的函数,例如substring就是针对于字符串的切片

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-08-26 16:59  小百天  阅读(136)  评论(0)    收藏  举报