鱼C论坛

 找回密码
 立即注册
查看: 1849|回复: 0

[学习笔记] Python L18 Function函数的几个定义和概念 练习

[复制链接]
发表于 2020-3-26 19:03:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 foxdai 于 2020-3-28 23:55 编辑

1.函数的几个定义和概念:
1.1 形参和实参,默认参数和关键字参数
形参即形式参数,是函数创建和定义过程中小括号里的参数,只是变量的一个形式而已;
实参即实际参数,是调用函数时候传递进去的参数(实际数据),这个实际值才是真正的数值;
1.2 默认参数,函数定义时指定初始值,调用时如果不传递实际参数,则使用初始值;参数定义过程中给与的默认值;
1.3 关键字参数,是在函数调用时,通过参数名指定需要赋值的参数,避免因搞不清参数顺序而出错;当参数很多时,不会因为参数顺序而调用错误;是指函数在调用的时候,带上参数的名字去指定具体调用的是哪个参数,从而可以不用按照参数的顺序调用函数;使用关键字参数,可以有效避免因不小心搞乱参数的顺序导致的BUG出现。
1.4 收集参数;也可叫变量参数,参数的个数不确定时;可以和其他常规参数并用,调用时,其他常规参数需要单独指定(或者为定义时候的默认值);

2.函数文档

3.其他几个要点
1. 函数调用(无前后顺序)
有些编程语言不够“聪明”,向这类向前引用的方式会导致报错,但Python足够“醒目”,这段代码是正确的!
如果没有使用 return 语句指定返回值,Python 也不是什么都不返回的,Ta 会返回一个 None 对象,所以我们说 Python 所有的函数都有返回值;

2. 请问 Python 的 return 语句可以返回多个不同类型的值吗?
可以丫,默认用逗号隔开,是以元祖的形式返回;也可以用列表包含起来返回;

3、重要:不到万不得已不要使用全局变量,简洁的概括为:
a) 代码可读性变差
b) 代码安全性降低

以下关于全局变量的危言耸听是转来的,大家不妨也看下:

a) 它会造成不必要的常量频繁使用,特别当这个常量没有用宏定义“正名”时,代码阅读起来将万分吃力。

b) 它会导致软件分层的不合理,全局变量相当于一条快捷通道,它容易使程序员模糊了“设备层”和“应用层”之间的边界。写出来的底层程序容易自作多情地关注起上层的应用。这在软件系统的构建初期的确效率很高,功能调试进度一日千里,但到了后期往往bug一堆,处处“补丁”,雷区遍布。说是度日如年举步维艰也不为过。

c) 由于软件的分层不合理,到了后期维护,哪怕仅是增加修改删除小功能,往往要从上到下掘地三尺地修改,涉及大多数模块,而原有的代码注释却忘了更新修改,这个时候,交给后来维护者的系统会越来越像一个“泥潭”,注释的唯一作用只是使泥潭上方再加一些迷烟瘴气。

d) 全局变量大量使用,少不了有些变量流连忘返于中断与主回圈程序之间。这个时候如果处理不当,系统的bug就是随机出现的,无规律的,这时候初步显示出病入膏肓的特征来了,没有大牛来力挽狂澜,注定慢性死亡。

e) 无需多言,如果您的系统中大量使用全局变量,那么您已经成功得到一个畸形的系统,它处于一个神秘的稳定状态!你看着这台机器,机器也看着你,相对无言,心中发毛。你不确定它什么时候会崩溃,也不晓得下一次投诉什么时候会到来。

4、多字符的同时格式化
'姓名:%s,年龄: %d, 出生日期: %s, 籍贯: %s' % (name,age,birthday,from)


练习题
def Daffodil(x):
    '''水仙花数的判断,1个3位数的每个数字的立方和与其相等,则其为水仙花数
    x为3位的数字,返回Bool值'''
    sum1 = 0
    for i in str(x):
        sum1 += int(i)**3
    if sum1 == x:
        return True
    else:
        return False

***几个自定义函数的练习
def Narcissus():
    '求水仙花,三位数的每个数字的立方和等于自己'
    sum1 = 0
    for i in range(100,1000):
        num0 = (i % 10)**3
        num00 = ((i // 10) % 10)**3
        num000 = ((i // 10) // 10)**3
        if i == num0 + num00 + num000:
            print(i,end='\t')
        else:
            continue

#老师的答案
def WaterF():
    for i in range(100,1000):
        sum1 = 0
        temp = i
        while temp:
            sum1 += (temp % 10)**3
            temp = temp // 10
        if sum1 == i:
            print(sum1,end="\t")

def SumxBase(a,b,c,d,e,f,base):
    '这个很垃圾,不知道如何使用参数,参数为【*param】'
    print((a+b+c+d+e+f)*base)

def mFun(*param, base=3):
    '多值之和*基数,基数缺省=3,默认参数的使用方法'
    result = 0
    for each in param:
        result += each

    result *= base
    print('结果是: ',result)

#2
def FindStr():
    str1 = input('请输入目标字符串:')
    sub1 = input('请输入子字符串:')
    print('子字符串在目标字符串中共出现 ',str1.count(sub1),' 次')
#这一题,老师怎么做的那么复杂,为什么不用str.count(sub)方法?
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 17:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表