Python之函数

如何定义一个函数

def hello():
    print('hello')
    print('python')

#通过函数名来调用函数
hello()
hello()
hello
python
hello
python

函数里面嵌套函数

def isfun():
    print('hello fun')
    def python():
        print('hi python')
    python()
isfun()
hello fun
hi python

参数:形参 实参
定义函数的时候的变量,叫形参(形参可以任意起名)
调用函数的时候传递的参数叫实参,有真实的数据信息

def welcome(a):
    print('hello',a)
 
welcome('tom')
welcome('lily')

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

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

def getInfo(name, age):  # 按照位置传参数
    print('name is % s , age is % s' %(name,age))

getInfo('westos', 11)
getInfo(11, 'westos')
getInfo(age=11, name='westos')

name is westos , age is 11
name is 11 , age is westos
name is westos , age is 11

###默认参数

def mypow(x,y=2):
print(x**y)
mypow(2,3)
mypow(4)
8
16

###可变参数
* 主要使用在函数参数中,在定义函数中添加是为了在调用该函数时直接将多个参数转换成一个元组,而在调用函数时参数添加 *,是为了将列表/元组转化成多个参数。

def mysum(*a):
print(*a)
print(a)

mysum(1,2,4,5)
1,2,4,5
(1,2,4,5)

mysum([1, 2, 4, 5])
[1, 2, 4, 5]
([1, 2, 4, 5],)

mysum({1, 2, 3, 4})
{1, 2, 3, 4}
({1, 2, 3, 4},)

 #参数解包 在参数名前加 *
mysum(*{1, 2, 3, 4})
1 2 3 4
(1, 2, 3, 4)

st=(34,76,1,5)
mysum(*st)
34 76 1 5
(34, 76, 1, 5)

###关键字参数
** 也主要使用在函数参数中,在定义函数中添加是为了在调用该函数时可以添加任意个键值对转出一个字典,而在调用函数时在列表中添加**,是为了将字典转化成多个参数。
*k:是一个字典,可以传递任意多的key-value

def func1(**b):
    print(b)
    print(*b)  ##如果要对字典进行解包,一个星号,获取所有的key值

func1(a=1,b=2)
{'a': 1, 'b': 2}
 a b

def func1(*b):
    print(b)
    print(*b)

mnm = {
    'a': 1,
    'b': 2
}
func1(*mnm)
('a', 'b')
a b

def func1(**b):
    print(b)
    print(*b)
    
mnm = {
    'a': 1,
    'b': 2
}
func1(**mnm)
{'a': 1, 'b': 2}
a b

函数的返回值
函数运算的结果,还需要进一步操作,给函数一个返回值
return用来返回函数执行的结果
如果函数没有返回值,默认返回None
一旦遇到return ,函数执行结束,后面的代码不会执行
当有多个返回值的时候,python会帮我们封装成一个元组类型

def mypow(x,y=2):
    #print(x**y)
    return x**y,x+y
    print('!!!!!')
a = mypow(4)
print(a)
print(mypow(5))

函数的作用域
局部变量:在函数内部定义的变量,只在函数内部起作用,函数执行结束后,变量会自动删除

def fun():
    a = 5
    print('inside:', id(a))
a = 1
print('outside:',id(a))
fun()
print(a)
print(id(a))

outside: 9326560
inside: 9326688
1
9326560
    
def fun():
   global a  # 声明a为全局变量
   a = 5
   print('inside:', id(a))
a = 1
print('outside:',id(a))
fun()
print(a)
print(id(a))

outside: 9326560
inside: 9326688
5
9326688

————–练习————–

编写一个函数cacluate,可以接收任意多个数,返回的是一个元组。
元组的第一个值为所有参数的平均值
第二个值是大于平均值的所有数

def cacluate(*a):
    sum=0
    k=0
    for i in a:
        sum+=i
        k+=1
    ave=sum/k
    nmb=[]
    for i in a:
        if (i>ave):
          nmb.append(i)
    return (ave,nmb)
a=cacluate(5,2,7,3,1,4,4,2,9,2)
print(a[0],a[1])

—————-练习—————–

编写一个函数,接收字符串参数,返回一个元组,‘ehllo WROLD’
元组的第一个值为大写字母的个数,第二个值为小写字母的个数

def spl(x):
    upper=0
    lower=0
    for i in x:
        if i.isupper():
            upper+=1
        elif i.islower():
            lower+=1
    return (upper,lower)
a=spl('jingJING IS beauty')
print(a[0],a[1])

—————-练习—————

编写函数,接收一个列表(包含30个整形数)和一个整形数K,返回一个新列表,
函数需求:
将列表下标K之前对应(不包括K)的元素逆序
将下标K及之后的元素逆序
[1,2,3,4,5] 2 [2,1,5,4,3]

>     def revs(a):
>         head=[]
>         rear=[]
>         j=0
>         for i in a:
>             if i=='k':
>                 j=1
>                 continue
>             elif(j==1):
>                 rear.append(i)
>             else:
>                 head.append(i)
>         newl=head[::-1] +rear[::-1]
>         return newl
>     a=revs([2,2,1,6,4,3,0,9,3,5,7,'k',3,5,6,8,9,2])
>     print(a)

-----------------OR----------------
import random
list = []
for i in range(30):
    list.append(random.randint(1,100))

def fun(alist,k):
    if k<0 or k > len(alist):
        return 'error key'
    return alist[:k][::-1] + alist[k:][::-1]
print(fun(list,9))

————–练习————–

编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2,并返回
该值。如果number是奇数,collatz()就打印并返回3*number+1。
然后编写一个程序,让用户输入一个整数,并不断对这个数
调用collatz(),直到函数返回值1(令人惊奇的是,这个序列
对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学
家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,
它有时候被称为“最简单的、不可能的数学问题”)。

  • 输入:
    3
  • 输出:
    10
    5
    16
    8
    4
    2
    1
> def collatz(nmb):
>     if (nmb%2==0):
>         print(nmb//2)
>         return nmb//2
>     else:
>         print(3*nmb+1)
>         return 3*nmb+1
> 
> nmb=int(input('请输入一个整数:')) while 1:
>     nmb=collatz(nmb)
>     if nmb==1:
>         exit()

——————–练习—————————–

题目:两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

————————练习————————–

模拟轮盘抽奖游戏
轮盘分为三部分: 一等奖, 二等奖和三等奖;
轮盘转的时候是随机的,
如果范围在[0,0.08)之间,代表一等奖,
如果范围在[0.08,0.3)之间,代表2等奖,
如果范围在[0.3, 1.0)之间,代表3等奖,
模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.

    原文作者:若无其事的苹果
    原文地址: https://blog.csdn.net/qq_36016375/article/details/90650626
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞