Python学习之Part06.函数初识

本文介绍了Python函数的基础,包括函数定义与调用、函数嵌套、参数传递、形参类型(位置参数、默认参数、可变参数、关键字参数)、返回值以及作用域的概念。通过实例展示了不同类型的形参用法以及函数如何处理列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.函数基本使用

1.定义函数

def print_hello():
    print('hello')

2.调用函数:通过函数名来调用

 print_hello()

输出结果:
在这里插入图片描述

2.函数的嵌套

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

hello()

此函数的输出结果是hello,则pytho()子函数没有执行

def hello():
    print('hello')
    def python():
        print('python')
    # 在函数中定义的子函数,必须在函数中进行调用.
    python()

hello()

输出结果为:

hello
pyhton

3.参数

python中一切皆对象,函数中传递的是对象的引用
1.形参/实参:

# 在定义函数时需要的变量.称为形参(形参名任意)
def hello(a):
    print('hello', a)
# 在调用函数时传递的参数称为实参
hello('python')

输出结果:

hello pyhton

4.形参详细说明

形参的类型有:位置参数, 默认参数,可变参数, 关键字参数
1.位置参数: 即形参和实参的位置一 一对应

def info(name, age):
    print('Name:', name)
    print('age:', age)
# 调用    
info('hello', 18)

输出结果为:

Name: hello
age: 18
# 调用
 info(18, 'hello')

输出结果为:

Name: 18
age: hello
# 调用
info(name='python', age=19)

输出结果为:

Name: python
age: 19

2.默认参数: 当无实参传递时,则使用默认参数;当有参数传递时,则使用实参

def my_pow(x, y=2):
    print(x ** y)
    
my_pow(2)

输出结果为: 4

my_pow(2, 5)

输出结果为:32

3.可变参数:可以接受多个参数传递

# args是一个新的引用(类似一个数组指针,指向一个指针数组,指针数组中存贮的指针指向原实参中的元素)
def my_sum(*args):
    print(*args)
    print(args)
    sum = 0
    for item in args:
        sum += item
    print(sum)
my_sum(1,2,3,4,5,6,7,8,9)

输出结果如下:

1 2 3 4 5 6 7 8 9
(1, 2, 3, 4, 5, 6, 7, 8, 9)
45

当实参如下时:

num_1 = [1,2,3]
num_2 = {4,5,6}
num_3 = (7,8,9)
# my_sum(num_1/) 不能直接调用
my_sum(*num_1)
my_sum(*num_2)
my_sum(*num_3)

输出结果如下:

1 2 3
(1, 2, 3)
6
4 5 6
(4, 5, 6)
15
7 8 9
(7, 8, 9)
24

4.关键字参数: 可以接受一个字典

def getinfo(name,age,**b):
    print('Name:',name)
    print('Age:',age)
    print('b:',b)
    
d=dict(a=1,b=2)
getinfo('python',18,**d)

输出结果如下:

Name: python
Age: 18
b: {'a': 1, 'b': 2}
# 调用
getinfo('tom',19,hobbies=['code','running'],gender='female')

输出结果如下:

Name: tom
Age: 19
b: {'hobbies': ['code', 'running'], 'gender': 'female'}
补充:

调用函数时使用* & **

test(*args)中:
* 的作用其实就是把序列 args 中的每个元素,当作位置参数传进去;
例如:如果 args 等于 (1,2,3) ,那么这个代码就等价于 test(1, 2, 3).

test(**kwargs)
** 的作用则是把字典 kwargs 变成关键字参数传递;
例如:如果 kwargs 等于 {'a':1,'b':2,'c':3} ,那这个代码就等价于 test(a=1,b=2,c=3).

定义函数参数时使用* & **

def test(*args):
*args 表示把传进来的位置参数都装在元组 args 里面;
例如:调用 test(1, 2, 3) 的话, args 的值就是 (1, 2, 3).

def test(**kwargs):
**args 表示把传进来的位置参数都装在元组 args 里面;
调用 test(a=1,b=2,c=3) 的话, kwargs 的值就是 {'a':1,'b':2,'c':3}.

5.函数的返回值

返回值:
return用来返回函数执行的结果 如果函数没有返回值 默认返回None
函数一旦遇到return 函数执行结束 后面的代码不会执行
具有多个返回值的时python会将结果封装成一个元组返回
def my_fun(x, y=2):
    return x**y,x+y
print(my_fun(2),type(my_fun(2)))

输出结果: (4, 4) <class ‘tuple’>

6.作用域

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

局部变量:

def fun_test():
    num=10
    print('inside:', num)
num = 20
print('outside:',num)
fun_test()
print('outside_after_fun:',num)

输出结果:

outside: 20
inside: 10
outside_after_fun: 20

全局变量:

def fun_test():
    global num
    num = 10
    print('inside:', num)
num = 20
print('outside:',num)
fun_test()
print('outside_after_fun:',num)

输出结果:

outside: 20
inside: 10
outside_after_fun: 10

练习:
编写函数, 接收一个列表(包含15个整形数)和一个整形数k, 返回一个新列表.
函数需求:
- 将列表下标k之前对应(不包含k)的元素逆序;
- 将下标k及之后的元素逆序;

def my_reverse(nums,k):
    nums_len = len(nums)
    nums_first = []
    nums_second = []
    for i in range(k):
        nums_first.append(nums[k-i-1])
    for i in range(1, (nums_len-k)+1):
        nums_second.append(nums[-i])
    nums_res = []
    for i in nums_first:
        nums_res.append(i)
    for i in nums_second:
        nums_res.append(i)
    return nums_res

import random
nums_li = []
for i in range(15):
    nums_li.append(random.randint(10,50))
k = int(input('Please input index k:'))
print(nums_li)
result = my_reverse(nums=nums_li, k=k)
print(result)

输出结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值