欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python Diary

程序员文章站 2024-01-01 12:52:22
函数上1. 函数简介函数也是一个对象函数用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用语法def 函数名([形参1,形参2,形参3....]): 代码块注意:函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)print是函数对象 print()是调用函数2. 函数的参数2.1 形参和实参形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值实参(实际参数)指定了形参,那么在调用函数时必须传递实....

目录

一、函数上

1. 函数简介

2. 函数的参数

2.1 形参和实参

2.2 函数的传递方式

2.3 实参的类型

3. 不定长参数

4. 参数的拆包

二、小练习

1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片

2.使用函数求前20个斐波那契数列斐波那契数列:1,1,2,3,5,8,13,21...即: 起始两项均为1,此后的项分别为前两项之和

3.编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果


一、函数上

1. 函数简介

  • 函数也是一个对象
  • 函数用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用
语法
def 函数名([形参1,形参2,形参3....]):
    代码块
# 函数也是一个对象
# 函数的特点
# 函数可以用来保存一些可执行的代码,在你需要的时候可以对这些代码重复的调用(使用)
# 函数中保存的代码不会立即执行,只当你调用函数的时候,代码才会执行
def fun():
# 名字做到见名知意
    print(1111)

# 调用函数:函数名称(函数对象)
fun()
fun()
# 运行结果:
1111
1111

注意:

函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)

print是函数对象  print()是调用函数

2. 函数的参数

2.1 形参和实参

  • 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值
  • 实参(实际参数)指定了形参,那么在调用函数时必须传递实参,实参将会赋值给对应的形参,简单来说有几个形参就要有几个实参
def fun(a, b):
# 形参:形式上参数
# 定义形参就相当于在函数内部声明了一个变量,但是并没有赋值,
# 有几个形参就得传递几个实参
    print(a + b)

fun(1, 2)  # 传实参: 实际的参数
# 运行结果:
3

2.2 函数的传递方式

  • 位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
    # 位置传参
    def fun(a, b, c):
        print(a)
        print(b)
        print(c)
    fun(1, 2, 3)
    # 运行结果:
    1
    2
    3

     

  • 定义形参时,可以为形参指定默认值。指定了默认值以后,如果用户传递了参数则默认值不会生效。如果用户没有传递,则默认值就会生效
    # 形参参数默认值
    def fun(a, b, c=20):  # c=20称呼为默认值
        print(a)
        print(b)
        print(c)
    
    fun(1, 2, 3)
    fun(1, 2)
    # 运行结果:
    1
    2
    3
    1
    2
    20

     

  • 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递
    # 关键字传参  位置顺序可以随便写
    def fun(a, b, c):
        print(a)
        print(b)
        print(c)
    fun(b=1, a=2, c=3)
    # 运行结果:
    2
    1
    3

     

2.3 实参的类型

# 实参任何类型都可以
def fun1():
    print(11111)

def fun(a):
    print(a)

b = 123
c = 'abc'
d = True
e = [1, 2, 3]
f = {'1': 1}
g = fun1
fun(b)
fun(c)
fun(d)
fun(e)
fun(f)
fun(g)
# 运行结果
123
abc
True
[1, 2, 3]
{'1': 1}
<function fun1 at 0x00000225233FA950>
def fun2(a):  # a=b 赋值是单向的
    a = 20
    print(a)

b=10
fun2(b)
print(b)
# 值传递,不影响实参
# 运行结果:
20
10
def fun2(a):
    a[0] = 10
    print(a)
b=[1,2,3]
fun2(b)
print(b)
# 地址传递,会影响实参
# 运行结果:
[10, 2, 3]
[10, 2, 3]

3. 不定长参数

  • 定义函数时,可以在形参前面加一个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到一个元组中
    def fun(*a):
        print(a)
    fun(1, 2, 3, 4, 5, 6)
    # 运行结果:
    (1, 2, 3, 4, 5, 6)

     

  • 带*号的形参只能有一个,可以和其他参数配合使用
    # 不定长参数要放到后面, *只能有一个
    def fun(c, b, *a):
        print(a)
        print(b)
        print(c)
    fun(1, 2, 3, 4, 5, 6)
    # 运行结果:
    (3, 4, 5, 6)
    2
    1

     

  • *形参只能接受位置参数,不能接受关键字参数
  • **形参可以接收其他的关键字参数,它会将这些参数统一保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值
    def fun(**a):
        print(a)
    
    fun(f=1, e=2, d=3, c=4, b=5, a=6)
    #运行结果:
    {'f': 1, 'e': 2, 'd': 3, 'c': 4, 'b': 5, 'a': 6}

     

  • **形参只有一个,并且必须写在所有参数的后面
    def fun(*b,**a):
        print(a)
        print(b)
    
    fun(1,2,3,4,f=1, e=2, d=3, c=4, b=5, a=6)
    # 运行结果:
    {'f': 1, 'e': 2, 'd': 3, 'c': 4, 'b': 5, 'a': 6}
    (1, 2, 3, 4)

     

4. 参数的拆包

  • 传递实参时,也可以在序列类型的参数前添加星号,这样它会自动的将序列中元素依次作为参数传递
  • 要求序列中的元素的个数必须和形参的个数一致
def fun(a, b, c):
    print(a)
    print(b)
    print(c)

tuple1 = (1, 2, 3)
fun(*tuple1)
# 运行结果:
​1
2
3
def fun(a, b, c):
    print(a)
    print(b)
    print(c)

dict1 = {'a': 1, 'b': 2, 'c': 3}
fun(*dict1)
# 运行结果:
a
b
c
def fun(a, b, c):
    print(a)
    print(b)
    print(c)

dict1 = {'a': 1, 'b': 2, 'c': 3}
fun(**dict1)
# 运行结果:
1
2
3

二、小练习

1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片

  • 控制姓名长度为6-20
  • 电话号码长度11
  • 性别只能允许输入男或女
  • 每一样信息不允许为空
def callingcard():
    while True:
        name = input('请输入姓名,长度控制在6-20:')
        number = input('请输入11位电话号码:')
        gender = input('请输入性别:')
        flag = True
        if len(name) < 6 or len(name) > 20:
            print('姓名长度为6-20!')
            flag = False
        if not number.isdigit():
            print('电话号码只能是数字!')
            flag=False
            if (len(number) != 11):
                print('请输入正确长度的电话号码!')
                flag = False
        if gender != '男' and gender != '女':
            print('性别输入有误!')
            flag = False
        if flag:
            print('=' * 30)
            print(f'||\t姓名:{name}')
            print(f'||\t电话号码:{number}')
            print(f'||\t性别:{gender}')
            print('=' * 30)
            break
        else:
            print('请重新输入!')

callingcard()

2.使用函数求前20个斐波那契数列斐波那契数列:1,1,2,3,5,8,13,21...即: 起始两项均为1,此后的项分别为前两项之和

def fib(n):
    f=[1 for x in range(0,n)] #表示长度为n、每个元素都为1的列表 [1,1,1,...,1] n个1
    i=2
    while i<n:
        f[i]=f[i-1]+f[i-2]
        i+=1
    print(f)
    
fib(20)

3.编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果

def sum1(n):
    i=1
    result=0
    while i<=n:
        result+=i
        i+=1
    print(result)

sum1(100)

 

本文地址:https://blog.csdn.net/weixin_48403688/article/details/110421315

相关标签: Python

上一篇:

下一篇: