栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python高级 — 函数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python高级 — 函数

1.python常见的列表推导式?

        [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]

2.简述read、readline、readlines的区别?              read:读取整个文件         readline:读取下一行         readlines:读取整个文件到一个迭代器以供我们遍历 3.python函数重载机制         函数重载主要是为了解决两个问题。
  • 可变参数类型。
  • 可变参数个数。
        另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同 的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字 不同的函数。         那么对于情况 1 ,函数功能相同,但是参数类型不同, python 如何处理?答案是根本不需要处 理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型 python 中 很可能是相同的代码,没有必要做成两个不同函数。         那么对于情况 2 ,函数功能相同,但参数个数不同, python 如何处理?大家知道,答案就是缺省参 数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数 终归是需要用的。         鉴于情况 1 跟 情况 2 都有了解决方案, python 自然就不需要函数重载了 。 4.写一个函数,找出一个整数数组中第二大的数         设置两个标志位一个存储最大数,一个存储次大数。 two 存储次大值, one 存储最大值,遍历一次数组即可,先判断是否大于 one ,若大于将 one 的值给 two ,将 num_list[i] 的值给 one ,否则比较是否大于 two ,若大于直接将 num_list[i] 的值给 two ,否则 pass 。
def find_second_large_num(num_list): 
    one = num_list[0]
    two = num_list[0]
    for i in range(1, len(num_list)): 
        if num_list[i] > one:
            two = one
            one = num_list[i] 
        elif num_list[i] > two:
            two = num_list[i] 
    print("第二个大的数是 :", two)
    
num_list = [34, 11, 23, 56, 78, 0, 9, 12, 3, 7, 5]
find_second_large_num(num_list)
5.手写一个判断时间的装饰器
import datetime

class TimeException(Exception):
    def __init__(self, exception_info):
        super().__init__()
        self.info = exception_info

    def __str__(self):
        return self.info
    
def timecheck(func):
    def wrapper(*args, **kwargs):
        if datetime.datetime.now().year == 2021: 
            func(*args, **kwargs)
        else:
            raise TimeException("函数已过时") 
            
    return wrapper

@timecheck
def test(name):
    print("Hello {}, 2021 Happy".format(name))

if __name__ == "__main__": 
    test("backbp")
6.使用Python内置的fifilter()方法来过滤
list(filter(lambda x: x % 2 == 0, range(10)))
7.编写函数的4个原则
  1. 函数设计要尽量短小
  2. 函数声明要做到合理、简单、易于使用
  3. 函数参数设计应该考虑向下兼容
  4. 一个函数只做一件事情,尽量保证函数语句粒度的一致性
8.函数调用参数的传递方式         Python的参数传递有:位置参数、默认参数、可变参数、关键字参数。         函数的传值到底是值传递还是引用传递、要分情况:         不可变参数用值传递:像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象。         可变参数是引用传递:比如像列表,字典这样的对象是通过引用传递、和C 语言里面的用指针传递数组很相似,可变对象能在函数内部改变。 9.如何在function里面设置一个全局变量
globals()  # 返回包含当前作用域全局变量的字典。
global 变量 设置使用全局变量
10.对缺省参数的理解         缺省参数指在调用函数的时候没有传入参数的情况下,调用默认的参数,在调用函数的同时赋值时,所传入的参数会替代默认参数。         *args是不定长参数,它可以表示输入参数是不确定的,可以是任意多个。         **kwargs是关键字参数,赋值的时候是以键值对的方式,参数可以是任意多对在定义函数的时候 不确定会有多少参数会传入时,就可以使用两个参数 。 11.带参数的装饰器

        带定长参数的装饰器

def new_func(func):
    def wrappedfun(username, passwd):
        if username == 'root' and passwd == '123456789': 
            print('通过认证')
            print('开始执行附加功能')
            return func() 
        else:
            print('用户名或密码错误')
            return 
    return wrappedfun

@new_func 
def origin():
    print('开始执行函数')
origin('root','123456789')
        带不定长参数的装饰器
def new_func(func):
    def wrappedfun(*parts): 
        if parts:
            counts = len(parts) 
            print('本系统包含 ', end='') 
            for part in parts:
                print(part, ' ',end='')
            print('等', counts, '部分') 
            return func()
        else:
            print('用户名或密码错误') 
            return func()
    return wrappedfun

@new_func 
def origin():
    print('开始执行函数')
origin('root','123456789')
12.为什么函数名字可以当做参数用?

        Python中一切皆对象,函数名是函数在内存中的空间,也是一个对象。

13.Python中pass语句的作用是什么?         在编写代码时只写框架思路,具体实现还未编写就可以用pass 进行占位,是程序不报错,不会进行任何操作。 14.map函数和reduce函数
map(lambda x: x * x, [1, 2, 3, 4])  # 使用 lambda
# [1, 4, 9, 16]
reduce(lambda x, y: x * y, [1, 2, 3, 4])  # 相当于 ((1 * 2) * 3) * 4
# 24
15.回调函数是如何通信的?         回调函数是把函数的指针( 地址 ) 作为参数传递给另一个函数,将整个函数当作一个对象,赋值给调用的函数。 16.Python主要的内置数据类型都有哪些?         布尔类型,数字,字符串,列表,元组,字典,集合 17.print dir( ‘a ’) 的输出?         输出字符串'a' 的内建方法
print(dir('a')) 

# 输出字符串 a 的内建方法
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
18.hasattr() getattr() setattr() 函数使用详解          hasattr(object,name)函数 :         判断一个对象里面是否有name 属性或者 name 方法,返回 bool 值,有 name 属性(方法)返回 True ,否 则返回 False 。
class function_demo(object): 
    name = 'demo'
    def run(self):
        return "hello function" 

functiondemo = function_demo()
res = hasattr(functiondemo, "name") # 判断对象是否有name属性,True
res = hasattr(functiondemo, "run") # 判断对象是否有run方法,True 
res = hasattr(functiondemo, "age") # 判断对象是否有age属性,False 
         getattr(object, name[,default])函数:         获取对象object 的属性或者方法,如果存在则打印出来,如果不存在,打印默认值,默认值可选。注意:如果返回的是对象的方法,则打印结果是:方法的内存地址,如果需要运行这个方法,可以在后面 添加括号 ()。
functiondemo = function_demo()
getattr(functiondemo, "name")# 获取name属性,存在就打印出来 --- demo 
getattr(functiondemo, "run") # 获取run 方法,存在打印出方法的内存地址
getattr(functiondemo, "age") # 获取不存在的属性,报错
getattr(functiondemo, "age", 18)# 获取不存在的属性,返回一个默认值
         setattr(object, name, values)函数:         给对象的属性赋值,若属性不存在,先创建再赋值 。
class function_demo(object): 
    name = "demo"
    def run(self):
        return "hello function" 
    
functiondemo = function_demo()
res = hasattr(functiondemo, "age") # 判断age属性是否存在,False
print(res)
setattr(functiondemo, "age", 18) # 对age属性进行赋值,无返回值
res1 = hasattr(functiondemo, "age") # 再次判断属性是否存在,True
print(res1)

        综合使用

class function_demo(object): 
    name = "demo"
    def run(self):
        return "hello function" 
    
functiondemo = function_demo()
res = hasattr(functiondemo, "addr") # 先判断是否存在
if res:
    addr = getattr(functiondemo, "addr") 
    print(addr)
else:
    addr = getattr(functiondemo, "addr", setattr(functiondemo, "addr", "北京首都"))
    print(addr)
19.一行代码解决阶乘函数
from functools import reduce 
n = 10
reduce(lambda x,y : x*y,range(1,n+1))
20.什么是lambda函数? 有什么好处?         lambda 函数, 匿名函数 ,是一个可以接收任意多个参数 ( 包括可选参数 )并且返回单个表达式值的函数, 省略了用 def 声明函 数的标准步骤 。
  1. lambda函数比较轻便,即用即扔,很适合需要完成一项功能,但是此功能只在此一处使用,连名字都很随意的情况下 ;
  2. 匿名函数,一般用来给fifilter,map这样的函数式编程服务 ;
  3. 作为回调函数,传递给某些应用,比如消息处理。
21.递归函数停止的条件         递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是return ,返回终止递归。         终止的条件:
  1. 判断递归的次数是否达到某一限定值 ;
  2. 判断运算的结果是否达到某个范围等,根据设计的目的来选择。
22.Python中append和extend的区别

Python中append和extend的区别https://www.cnblogs.com/subic/p/6553187.html        append命令是将整个对象加在列表末尾;而extend命令是将新对象中的元素逐一加在列表的末尾。总的来说,append命令可以添加单个元素,也可以添加可迭代对象;而extend命令只能添加可迭代对象。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325943.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号