Python之函数

本文围绕Python函数展开,介绍了函数的概念,即实现特定功能的代码块,可接收和返回参数。阐述了定义函数的注意事项,包括以def开头、函数名、参数、冒号等。还讲解了形参、实参分类,函数返回值和作用域,并给出多个函数示例及综合练习。

Python之函数

  • 什么是函数

函数是可以实现一些特定功能的小方法或是小程序
函数,就是指为一段实现特定功能的代码“取”一个名字,以后即可通过该名字来执行(调用)该函数。
通常,函数可以接收零个或多个参数,也可以返回零个或多个值。从函数使用者的角度来看,函数就像一个“黑匣子”,程序将零个或多个参数传入这个“黑匣子”,该“黑匣子”经过一番计算即可返回零个或多个值。

定义函数需要注意的几个事项:
1、def开头,代表定义函数
2、def和函数名中间要敲一个空格
3、之后是函数名,这个名字用户自己起的,方便自己使用就好
4、函数名后跟圆括号(),代表定义的是函数,里边可加参数
5、圆括号()后一定要加冒号: 这个很重要,不要忘记了
6、代码块部分,是由语句组成,要有缩进
7、函数要有返回值return

  • 定义一个函数

def hello()定义一个函数
通过函数名来调用函数

[kiosk@foundation13 ~]$ vim test.py
[kiosk@foundation13 ~]$ cat test.py 
def hello():
    print('hello')
    print('python')
hello()
[kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test.py 
hello
python

函数中嵌套函数:

[kiosk@foundation13 ~]$ vim test1.py
[kiosk@foundation13 ~]$ cat test1.py 
def westos():
    print('is westos')
    def python():
        print('is python')
    python()
westos()
[kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test1.py 
is westos
is python

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

[kiosk@foundation13 ~]$ vim test2.py
[kiosk@foundation13 ~]$ cat test2.py 
def welcome(a):
    print('hello',a)
welcome('tom')
welcome('lily')
[kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test2.py 
hello tom
hello lily
  • 型参的分类

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

[kiosk@foundation13 ~]$ vim test3.py
[kiosk@foundation13 ~]$ cat test3.py
def getInfo(name,age):# 按照位置传参数
     print(name,age)
getInfo('westos',11)
getInfo(11,'westos')
getInfo(age=11,name='westos')
[kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test3.py 
westos 11
11 westos
westos 11

默认参数 :

[kiosk@foundation13 ~]$ vim test4.py
[kiosk@foundation13 ~]$ cat test4.py 
def mypow(x,y=2):
     print(x**y)
mypow(2,3)
mypow(4)
[kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test4.py 
8
16

可变参数 :
参数解包:在参数名前加*

[kiosk@foundation13 ~]$ vim test5.py
[kiosk@foundation13 ~]$ cat test5.py 
def mysum(*a):
     print(*a)
     print(a)
     sum = 0
     for item in a:
         sum += item
     print(sum)

nums = [1,2,4,5]
nums1 = (1,2,3,4)
nums2 = {1,2,3,4}

mysum(*nums)
mysum(*nums1)
mysum(*nums2)
[kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test5.py 
1 2 4 5
(1, 2, 4, 5)
12
1 2 3 4
(1, 2, 3, 4)
10
1 2 3 4
(1, 2, 3, 4)
10

关键字参数:
*k:是一个字典,可以传递任意多的key-value
如果要对字典进行解包,一个星号,获取所有的key值

kiosk@foundation13 ~]$ vim test6.py
[kiosk@foundation13 ~]$ cat test6.py 
def getStuInfo(name,age,**k):
    print(name)
    print(age)
    print(k)
getStuInfo('westos',11,a=1,b=2)

d = dict(a=1,b=2)
print(*d)
[kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test6.py 
westos
11
{'a': 1, 'b': 2}
a b
  • 函数的返回值

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

[kiosk@foundation13 ~]$ vim test7.py
[kiosk@foundation13 ~]$ cat test7.py 
def mypow(x,y=2):
    #print(x**y)
    return x**y,x+y
a = mypow(4)
print(a)
print(mypow(5))
[kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test7.py 
(16, 6)
(25, 7)
  • 函数的作用域

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

[kiosk@foundation13 ~]$ vim test8.py
[kiosk@foundation13 ~]$ cat test8.py 
a = 1
print('outside:',id(a))

def fun():
    global a #声明a为全局变量
    a = 5
    print('inside:',id(a))
fun()
print(a)
print(id(a))
[kiosk@foundation13 ~]$ /usr/local/python3/bin/python3 test8.py 
outside: 9326560
inside: 9326688
5
9326688
  • 函数的示例

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

def cacluate(*a):
     sum = 0
     b = 0
     for i in a:
         sum += i
         b += 1
     ave = sum / b
     maxnum = []
     for i in a:
         if (i > ave):
             maxnum.append(i)
     return (ave, maxnum)

print(cacluate(2,2,5,6,3,8,6,3,1))

2.编写一个函数, 接收字符串参数, 返回一个元组,‘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('hello YOU are FAT')
print(a[0],a[1])

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

import random
def fun(alist,k):
    if k<0 or k > len(alist):
        return 'error key'
    return alist[:k][::-1] + alist[k:][::-1]
print(fun([1,2,3,4,5],2))

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

def collatz(number):
    if number == 1:
        exit()
    elif number % 2 == 0:
        return number // 2
    else:
        return 3 * number + 1

num = int(input('Num:'))
while True:
    num = collatz(num)
    print(num)
  • 函数的综合练习

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

T1 = ('a','b','c')
T2 = ('x','y','z')

arr = [] #可能的组合

def comb(i,j,k):
    c1 = T1[0] + '-' + T2[i]
    c2 = T1[1] + '-' + T2[j]
    c3 = T1[2] + '-' + T2[k]
    return tuple([c1,c2,c3])

#找出x,y,z的所有组合
for i in range(3):
    for j in range(3):
        for k in range(3):
            if (i == j) or (i == k) or (j == k):
                continue
            arr.append(comb(i,j,k))

#过滤不符合要求的组合
for g in arr:
    if ('a-x' in g) or ('c-z' in g) or ('c-z' in g):
        continue
    print(g)

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值