前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试复习-Python-函数

面试复习-Python-函数

作者头像
宅蓝三木
发布2024-10-09 21:08:36
760
发布2024-10-09 21:08:36
举报
文章被收录于专栏:三木的博客

函数的参数组

代码语言:javascript
复制
>>> def myfunc(*args, **kwargs):
...     print(args)
...     print(kwargs)
...
>>> myfunc(1, 2, name="sen")
(1, 2)
{'name': 'sen'}
>>> myfunc(1, 2, name="sen", 3)
  File "<stdin>", line 1
    myfunc(1, 2, name="sen", 3)
                              ^
SyntaxError: positional argument follows keyword argument
>>> myfunc(name="sen")
()
{'name': 'sen'}

函数的属性

代码语言:javascript
复制
>>> myfunc.__doc__
>>> myfunc.version
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'version'
>>> myfunc.__
myfunc.__annotations__    myfunc.__hash__()
myfunc.__builtins__       myfunc.__init__(
myfunc.__call__(          myfunc.__init_subclass__(
myfunc.__class__(         myfunc.__kwdefaults__
myfunc.__closure__        myfunc.__le__(
myfunc.__code__           myfunc.__lt__(
myfunc.__defaults__       myfunc.__module__
myfunc.__delattr__(       myfunc.__name__
myfunc.__dict__           myfunc.__ne__(
myfunc.__dir__()          myfunc.__new__(
myfunc.__doc__            myfunc.__qualname__
myfunc.__eq__(            myfunc.__reduce__()
myfunc.__format__(        myfunc.__reduce_ex__(
myfunc.__ge__(            myfunc.__repr__()
myfunc.__get__(           myfunc.__setattr__(
myfunc.__getattribute__(  myfunc.__sizeof__()
myfunc.__getstate__()     myfunc.__str__()
myfunc.__globals__        myfunc.__subclasshook__(
myfunc.__gt__(            myfunc.__type_params__
>>> myfunc.__str__()
'<function myfunc at 0x104ce05e0>'

装饰器

代码语言:javascript
复制
def repeat(n):
  def dec_func(func):
    def wrapper(*args, **kwargs):
      for _ in range(n):
        result = func(*args, **kwargs)
      return result
    return wrapper
  return dec_func

@repeat(3)
def say_hello():
  print('hello')

say_hello()

可变长参数

代码语言:javascript
复制
>>> def my_function(*args, **kwargs):
...     for arg in args:
...         print(f"Position argument: {arg}")
...     for key, value in kwargs.items():
...         print(f"Keyword argument {key}: {value}")
...
>>> my_function(*(1,2,3,4,5), **{'name':'sen'})
Position argument: 1
Position argument: 2
Position argument: 3
Position argument: 4
Position argument: 5
Keyword argument name: sen

函数式编程用到的工具函数

代码语言:javascript
复制
>>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> filter(lambda x:True if x > 5 else False, l)
<filter object at 0x102c47370>
>>> list(filter(lambda x:True if x > 5 else False, l))
[6, 7, 8, 9, 10]
>>> list(map(lambda x:x**2, l))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> from functools import reduce
>>> reduce(lambda x,y:x+y, l)
55
代码语言:javascript
复制
# 偏函数 与 柯里化
>>> from operator import add, mul
>>> from functools import partial
>>> add1 = partial(add, 1)
>>> add1(3)
4
>>> mul4 = partial(mul, 4)
>>> mul4(5)
20
>>> base2 = partial(int, base=2)
>>> base2('10010111')
151

变量作用域

局部变量通常会覆盖全局变量,可以在函数中通过global关键字引用全局变量

代码语言:javascript
复制
>>> def say_hello():
...   global foo
...   foo = 200
...   print(foo)
...
>>> foo = 100
>>> say_hello()
200
>>> foo
200

闭包

在 Python 中,闭包是一种函数,它可以访问其外部函数作用域中的变量,即使外部函数已经返回。

闭包由以下几个部分组成:

  1. 外部函数:包含一个内部函数,并可能有一些局部变量。
  2. 内部函数:定义在外部函数内部,引用外部函数的局部变量。
  3. 外部函数的返回值:返回内部函数,使得内部函数可以在外部被调用。

闭包的作用:

  • 数据隐藏和封装: 闭包可以将一些数据隐藏在内部函数中,外部无法直接访问这些数据,只能通过闭包提供的接口来操作。 例如,可以使用闭包来创建一个计数器,外部只能通过特定的函数来增加或读取计数器的值,而不能直接修改计数器的内部状态。
  • 记忆功能: 闭包可以记住外部函数的局部变量的值,即使外部函数已经返回。 这在需要保存状态或实现记忆化等场景非常有用。例如,在计算斐波那契数列时,可以使用闭包来实现记忆化,避免重复计算。
  • 实现面向对象编程的某些特性: 闭包可以模拟类的属性和方法,通过闭包可以创建具有私有变量和方法的对象。 例如,可以使用闭包来创建一个具有私有变量的对象,外部只能通过特定的方法来访问和修改这个私有变量。
代码语言:javascript
复制
>>> def fibonacci():
...     a, b = 0, 1
...     def inner():
...         nonlocal a, b
...         result = a
...         a, b = b, a + b
...         return result
...     return inner
...
>>> fib = fibonacci()
>>> for _ in range(10):
...     print(fib())
...
0
1
1
2
3
5
8
13
21
34
>>> fib()
55

生成器

生成器函数是一种包含yield关键字的函数。当调用生成器函数时,它不会立即执行函数体,而是返回一个生成器对象。每次调用生成器对象的__next__()方法或在循环中使用生成器时,函数会执行到下一个yield语句,暂停并返回一个值。然后,下次调用__next__()方法时,函数会从上次暂停的地方继续执行。

代码语言:javascript
复制
def my_generator():
    for i in range(5):
        yield i

gen = my_generator()
for num in gen:
    print(num)

协程

在 Python 中,协程是一种轻量级的并发编程方式,它允许在一个线程内实现多个任务的切换和协作,而不需要使用多线程或多进程。协程可以在等待某个事件发生时暂停执行,然后在事件发生后恢复执行,从而实现高效的并发处理.

优点:

  • 高效的并发处理:协程可以在一个线程内实现多个任务的切换和协作,避免了传统线程之间的上下文切换开销,从而提高了并发处理的效率。
  • 轻量级:协程是一种轻量级的并发编程方式,它不需要操作系统的线程调度和上下文切换,因此占用的资源较少。
  • 易于编程:协程的编程模型相对简单,程序员可以自己控制执行流程,避免了传统线程之间的竞争和同步问题,从而降低了编程的难度。
代码语言:javascript
复制
>>> def print_received():
...   print('started')
...   x = yield
...   print('received: {}'.format(x))
...
>>> p = print_received()
>>> p.send(None)
started
>>> p.send(10)
received: 10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数的参数组
  • 函数的属性
  • 装饰器
  • 可变长参数
  • 函数式编程用到的工具函数
  • 变量作用域
  • 闭包
  • 生成器
  • 协程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档