zoukankan      html  css  js  c++  java
  • Python—函数

    ###python的函数###

    1.函数的定义

       如果不主动调用函数,函数是不会执行的

    def say_hello():       ##定义函数

    print 'hello'

    print 'wangfang'

    say_hello()    ##函数的调用

    #定义函数时的变量,叫形参  形参可以任意取名

    def sum_2_sum():

    num1 = 10

    num2 = 10

    result = =num1 + num2

    print '%d + %d = %d' %(num1,num2,result)

    #在调用函数的时候传递的参数称为实参(真实的数据信息)

    sum_2_sum(5,20)

    """

    函数参数的使用:

    在函数名后面的小括号内填写 参数

    多个参数之间用 ,分隔开

    """

    练习题:

    编写一个名为collatz()的函数,它有一个名为number的参数

    -如果参数是偶数,那么collatz()就打印出number//2.

    -如果参数是奇数,那么collatz()就打印出3*number+1.

           

    2.函数形参之四大参数

    参数:形参  实参

    形参:位置参数 默认参数 可变参数 关键字参数

    #位置参数:形参和实参个数必须保持一致

    def inform(name,age):

        print name

        print age

    inform('wf',20)

    #但是如果我输入的name,age位置互换

    # 程序不会报错,此输出错误

    inform(18,'wang')

    #为了能够正确输出可以这样写

    inform(name='fang',age=18)

    #默认参数:形参和实参的个数可以不一致   默认形参可以改变

    def mypow(x,y=2):

        print x**y

    #这个y如果用户没有输出

    #默认就是y=2

    #会有输出的值,但是提供给我们用的pow()函数

    #如果输入的形参和实参个数不一致的话,会报错

    mypow(2)

    #默认的值是可以修改的

    mypow(2,3)

    #可变参数:利用 *args:是可变参数

      *args:是元组类型的数据

              *args:名字可变(因为是形参 名字可变)

    def mysum(*args):

        print args

        sum = 0

        for i in args:

            sum += i

        print sum

    mysum(1,2,3)

    #对列表,元组,集合接解包,只需要在变量前加*

    num = [1,2,3]

    num1 = {1,2,3}

    num2 = (1,2,3)

    #解包

    mysum(*num1)

    mysum(*num)

    mysum(*num2)

           

       就比如,本来的sum求和,需要一个范围,我想定义一个我自己的sum函数,但是用户输入的数值是不一定的,所以就要用到可变参数

    #关键字参数:**kwargs:是一个字典;可以传递任意多的key—value对

     

    def student(name,age,**kwargs):

        print name

        print age

        print kwargs

    student('wang',20,habbies=['running'])

           

    3.函数的返回值

    返回值:函数运算的结果,如果还需要进一步操作的时候,

    就需要给函数写入一个返回值return

    rerutn用来返回函数执行的结果。如果没有返回值,默认为None

    python可以间接的返回多个值(即,返回了一个元组)

    一旦遇到return,将函数的执行结果返回后,后面的代码就不会执行

    def mypow(x, y=2):

        return x ** y

        print 'hello'

    a = mypow(3)

    print a            ##输出 9

    def mypow1(x, y=2):

        return x ** y, x + y

        print 'hello'

    b = mypow1(3)

    print b            ##输出 (9,5)

    c.d = mypow1(3)

    print c,d          ##输出 9 5   这个相当于对元组解包

    4.函数变量的作用域

    局部变量:在函数内部定义的普通变量,只在函数内部作用

            函数执行完成之后,变量会自动删除

    全局变量

    a = 10             ##这个变量是全局变量

    print 'outside:',id(a)

    def fun():

        a = 5          ##这个变量是局部变量

        print 'inside:',id(a)

    fun()              ##调用函数

    print a

    print id(a)

    a = 10

    print 'outside:',id(a)

    def fun():

        global a       ##声明 a 是全局变量

        a = 5

        print 'inside:',id(a)

    fun()              ##调用函数,下面的a才会是fun()函数里改变的值

    print a            ##如果没有调用,函数没有执行,a没有被更改

    print id(a)

    5.函数的引用

    a = 10    #系统在内存中a开辟了一个空间,在空间中填入的是 10 这个数字的地址值,就相当于,a指向了10这个数据

    a = 20    #将原本 10 的地址值用 20 的地址值替换,就相当于 a改变了指向

       注意:alt + enter 如果刚开始没有导包的话,按这两个键然后就会自动导入包

    练习题:

    1)编写一个函数calculate

    -可以接受任意多个数,返回的是一个元组

    -元组的第一个数,是所有的参数的平均值

    -第一个参数是大于平均值的所有数

           

    2)编写函数

    -接收一个列表(包含30个随机生成的整形数)和一个整形数K

    -返回一个新的列表

    -要求:

    --将列表下标K之前的元素逆序

    --将下标K之后的元素逆序

    --如:[1,2,3,4,5]2    [2,1,5,4,3]

           

          

    结果:

          

    (3)模拟轮盘抽奖游戏

    -分为三部分:一等奖,二等奖和三等奖

    -转盘转的时候是随机的

    ---如果范围在[0,0.08)之间,代表一等奖;

    ---如果范围在[0.08,0.3)之间,代表二等奖;

    ---如果范围在[0.3,1)之间,代表三等奖;

    -模拟本次活动1000人参加,模拟游戏时需要准备各等级奖品的个数

           

          

    结果:

          

    4)对于一个十进制的正整数,定义f(n)为其各位数字的平方和

    -如:f(13)=1**2+3**2=10

    -下面给出三个正整数k,a,b,你需要计算有多少个正整数n满足 a <= n <= b

    -且 k*f(n)=n

    -输入:51 5000 10000

    -输出:3

           

          

    (5)编写一个函数,接受一个字符串参数,返回一个元组,

    -‘hello WORLD’

    -元组第一个值为大写字母的个数,第二个值为小写字母的个数

           

    6)打字软件正确率

    -编写函数,计算字符串匹配的准确率

    -orginstr为原始内容,userstr为用户输入的内容

    6.列表生成式

    s = '51 5000 10000'

    li = []

    for i in s.split():

       li.append(int(i))

    k,a,b = li

    列表生成式:print k,a,b = [int(i) for i in s.split()]

    1)生成一个列表,列表元素分别为[1**2,2**2,3**2,4**2,...<n**2]

    li = []

    for i in range(1,8):

       li.append(i**2)

    print li

    列表生成式:print [i**2 for i in range(1,8)]

    2)找出1~10之间的所有的偶数,并且返回一个列表(包含以这个偶数为半径的圆的面积)

    import math    ##这个是关键,要导入数学的包,才能用 pi

    li = []

    for r in range(2,11,2):

       square = math.pi * r * r

       li.append(square)

    print li

    列表生成器: print [math.pi*r*r for r in range(2,11,2)]

    3)找出1~10之间的所有奇数,并且返回一个列表(所有的奇数转换为字符串)

    列表生成器:print [str(i) for i in range(1,11,2)]

    4)找出1~num之间的所有质数

    def isPrime(num):

       for i in range(2,num):

    if num % 2 ==0:

       return False

       else:

    return True

    print [i for i in range(2,num) if isPrime(i)]

    5)给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并且输出结果。

    -输入值小于1000

    -例如:输入10,程序应该输出结果为2

    -共有两对质数的和为10,分别为(5,5)和(3,7)

    7.字典生成式

    1)假设有20个学生,学分在60~100之间,筛选出成绩在90分以上的学生

    import random

    student = {}

    for i in range(20):

       name = 'westos' + str(i)

       score = random.randint(60,100)

       student[name] = score

    或者:

       student['westos'+str(i)] = random.randint(60,100)

    print student

           

    highscore = {}

    for name,score in student.items():

       if score > 90:

    highscore[name] = score

    print highscore

    或者:

       print {name:score for name,score in student.items() if score >90}

           

    2)将字典中的key和value值调换

    d = {'a':'apple','b':'bob','c':'cat'}

    print {v:k for k,v in d.items()}

    8.函数的装饰器

       在不改变原函数的基础上,给函数增加功能

       把一个函数当作参数,返回一个替代版的函数

       本质上:返回函数的函数

       示例1:

    def func1():

       print 'have a nice day!'

    def func2():

       print 'good luck!'

    def outer(func):

       def inner():

    print '**********'

    func()

       return inner()

    func1 = outer(func1)

    func1()    ##调用

           

       示例2:

    def say(age):

       print 'man is %d years old' %age

    def outer(func):

       def inner(age):

    if age < 0:

      age = 0

    func(age)

       return inner

    say = outer(say)

           

    9.函数的语法糖

    def desc(fun):

       def add():

    print '中秋快乐!'

    print '西开欢迎你!'

       return add

    @desc                    ##语法糖

    def login():

       print 'login...'

    @desc                    ##语法糖

    def logout():

       print 'logout...'

           

  • 相关阅读:
    幂集问题 子集问题
    windows下_snprintf用法
    动态绑定与静态绑定
    转载:(C++)浅谈多态基类析构函数声明为虚函数
    “希希敬敬对”队软件工程第九次作业-beta冲刺第六次随笔
    希希敬敬对Alpha阶段测试报告
    Alpha阶段个人总结
    “希希敬敬对”团队作业——敏捷冲刺7
    “希希敬敬对”团队作业——敏捷冲刺6
    “希希敬敬对”团队作业——敏捷冲刺5
  • 原文地址:https://www.cnblogs.com/wf-aiyouwei/p/9595508.html
Copyright © 2011-2022 走看看