diff --git a/AUTHORS.txt b/AUTHORS.txt
index 64aae316..bc258d6b 100644
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -33,5 +33,6 @@ Savor d'Isavano (@KenetJervet) <newelevenken@163.com>
 Phillip Berndt (@phillipberndt) <phillip.berndt@gmail.com>
 Ian Lee (@IanLee1521) <IanLee1521@gmail.com>
 Farkhad Khatamov (@hatamov) <comsgn@gmail.com>
+Kevin Kelley (@kelleyk) <kelleyk@kelleyk.net>
 
 Note: (@user) means a github user name.
diff --git a/jedi/api/classes.py b/jedi/api/classes.py
index a1d42bd0..75275dd2 100644
--- a/jedi/api/classes.py
+++ b/jedi/api/classes.py
@@ -336,7 +336,7 @@ class BaseDefinition(object):
             raise AttributeError()
         followed = followed[0]  # only check the first one.
 
-        if followed.type == 'funcdef':
+        if followed.type in ('funcdef', 'lambda'):
             if isinstance(followed, er.InstanceElement):
                 params = followed.params[1:]
             else:
diff --git a/jedi/parser/tree.py b/jedi/parser/tree.py
index 619067e1..899d5f1c 100644
--- a/jedi/parser/tree.py
+++ b/jedi/parser/tree.py
@@ -748,6 +748,15 @@ def _create_params(parent, argslist_list):
 class Function(ClassOrFunc):
     """
     Used to store the parsed contents of a python function.
+
+    Children:
+      0) <Keyword: def>
+      1) <Name>
+      2) parameter list (including open-paren and close-paren <Operator>s)
+      3) <Operator: :>
+      4) Node() representing function body
+      5) ??
+      6) annotation (if present)
     """
     __slots__ = ('listeners',)
     type = 'funcdef'
@@ -760,6 +769,7 @@ class Function(ClassOrFunc):
 
     @property
     def params(self):
+        # Contents of parameter lit minus the leading <Operator: (> and the trailing <Operator: )>.
         return self.children[2].children[1:-1]
 
     @property
@@ -791,10 +801,13 @@ class Function(ClassOrFunc):
 
         :rtype: str
         """
-        func_name = func_name or self.children[1]
-        code = unicode(func_name) + self.children[2].get_code()
+        func_name = func_name or self.name
+        code = unicode(func_name) + self._get_paramlist_code()
         return '\n'.join(textwrap.wrap(code, width))
 
+    def _get_paramlist_code(self):
+        return self.children[2].get_code()
+    
     @property
     def doc(self):
         """ Return a document string including call signature. """
@@ -805,6 +818,12 @@ class Function(ClassOrFunc):
 class Lambda(Function):
     """
     Lambdas are basically trimmed functions, so give it the same interface.
+
+    Children:
+       0) <Keyword: lambda>
+       *) <Param x> for each argument x
+      -2) <Operator: :>
+      -1) Node() representing body
     """
     type = 'lambda'
     __slots__ = ()
@@ -813,9 +832,17 @@ class Lambda(Function):
         # We don't want to call the Function constructor, call its parent.
         super(Function, self).__init__(children)
         self.listeners = set()  # not used here, but in evaluation.
-        lst = self.children[1:-2]  # After `def foo`
+        lst = self.children[1:-2]  # Everything between `lambda` and the `:` operator is a parameter.
         self.children[1:-2] = _create_params(self, lst)
 
+    @property
+    def name(self):
+        # Borrow the position of the <Keyword: lambda> AST node.
+        return Name(self.children[0].position_modifier, '<lambda>', self.children[0].start_pos)
+
+    def _get_paramlist_code(self):
+        return '(' + ''.join(param.get_code() for param in self.params).strip() + ')'
+    
     @property
     def params(self):
         return self.children[1:-2]
@@ -823,6 +850,7 @@ class Lambda(Function):
     def is_generator(self):
         return False
 
+    @property
     def yields(self):
         return []
 

'Lambda' object has no attribute 'get_subscope_by_name'
Jedi 0.9.0, Python 2.7.3

Reproduction:

```Python
import jedi

script = """\                                                                   
my_lambda = lambda x: x+1                                                       
my_lambda(1)                                                                    
"""

sigs = jedi.Script(script, line=2, column=11).call_signatures()
print sigs[0].index
```

Traceback:

```
Traceback (most recent call last):
  File "/home/forcer/Projects/elpy/elpy/rpc.py", line 100, in handle_request
    result = method(*params)
  File "/home/forcer/Projects/elpy/elpy/server.py", line 87, in rpc_get_calltip
    get_source(source), offset)
  File "/home/forcer/Projects/elpy/elpy/server.py", line 49, in _call_backend
    return meth(*args, **kwargs)
  File "/home/forcer/Projects/elpy/elpy/jedibackend.py", line 129, in rpc_get_calltip
    "index": call.index,
  File "/home/forcer/.virtualenvs/elpy/local/lib/python2.7/site-packages/jedi/api/classes.py", line 653, in index
    if self._index >= len(self.params):
  File "/home/forcer/.virtualenvs/elpy/local/lib/python2.7/site-packages/jedi/evaluate/cache.py", line 41, in wrapper
    rv = function(obj, *args, **kwargs)
  File "/home/forcer/.virtualenvs/elpy/local/lib/python2.7/site-packages/jedi/api/classes.py", line 348, in params
    sub = followed.get_subscope_by_name('__init__')
  File "/home/forcer/.virtualenvs/elpy/local/lib/python2.7/site-packages/jedi/evaluate/representation.py", line 563, in __getattr__
    return getattr(self.base_func, name)
AttributeError: 'Lambda' object has no attribute 'get_subscope_by_name'
```
diff --git a/test/test_parser/test_parser_tree.py b/test/test_parser/test_parser_tree.py
new file mode 100644
index 00000000..480230ba
--- /dev/null
+++ b/test/test_parser/test_parser_tree.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8    # This file contains Unicode characters.
+
+from textwrap import dedent
+
+import pytest
+
+from jedi._compatibility import u, unicode
+from jedi.parser import Parser, load_grammar
+from jedi.parser import tree as pt
+
+
+class TestsFunctionAndLambdaParsing(object):
+
+    FIXTURES = [
+        ('def my_function(x, y, z):\n    return x + y * z\n', {
+            'name': 'my_function',
+            'call_sig': 'my_function(x, y, z)',
+            'params': ['x', 'y', 'z'],
+        }),
+        ('lambda x, y, z: x + y * z\n', {
+            'name': '<lambda>',
+            'call_sig': '<lambda>(x, y, z)',
+            'params': ['x', 'y', 'z'],
+        }),
+    ]
+
+    @pytest.fixture(params=FIXTURES)
+    def node(self, request):
+        parsed = Parser(load_grammar(), dedent(u(request.param[0])))
+        request.keywords['expected'] = request.param[1]
+        return parsed.module.subscopes[0]
+
+    @pytest.fixture()
+    def expected(self, request, node):
+        return request.keywords['expected']
+    
+    def test_name(self, node, expected):
+        assert isinstance(node.name, pt.Name)
+        assert unicode(node.name) == u(expected['name'])
+    
+    def test_params(self, node, expected):
+        assert isinstance(node.params, list)
+        assert all(isinstance(x, pt.Param) for x in node.params)
+        assert [unicode(x.name) for x in node.params] == [u(x) for x in expected['params']]
+
+    def test_is_generator(self, node, expected):
+        assert node.is_generator() is expected.get('is_generator', False)
+
+    def test_yields(self, node, expected):
+        # TODO: There's a comment in the code noting that the current implementation is incorrect.  This returns an
+        # empty list at the moment (not e.g. False).
+        if expected.get('yields', False):
+            assert node.yields
+        else:
+            assert not node.yields
+
+    def test_annotation(self, node, expected):
+        assert node.annotation() is expected.get('annotation', None)
+
+    def test_get_call_signature(self, node, expected):
+        assert node.get_call_signature() == expected['call_sig']
+
+    def test_doc(self, node, expected):
+        assert node.doc == expected.get('doc') or (expected['call_sig'] + '\n\n')

pip install -e .
parse_log_pytest
requirements.txt
pytest pytest-cache docopt colorama
apt-get update apt-get install -y gcc
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
colorama==0.4.6
docopt==0.6.2
exceptiongroup==1.2.2
execnet==2.1.1
iniconfig==2.1.0
-e git+https://github.com/davidhalter/jedi.git@e0753da6f1ed83185b84c0f9ab65eed67c80dcb4#egg=jedi
packaging==24.2
pluggy==1.5.0
pytest==8.3.5
pytest-cache==1.0
tomli==2.2.1

name: jedi
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - colorama==0.4.6
      - docopt==0.6.2
      - exceptiongroup==1.2.2
      - execnet==2.1.1
      - iniconfig==2.1.0
      - packaging==24.2
      - pluggy==1.5.0
      - pytest==8.3.5
      - pytest-cache==1.0
      - tomli==2.2.1
prefix: /opt/conda/envs/jedi

test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_name[node1] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_yields[node1] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_get_call_signature[node1]
test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_name[node0] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_params[node0] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_params[node1] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_is_generator[node0] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_is_generator[node1] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_yields[node0] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_annotation[node0] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_annotation[node1] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_get_call_signature[node0] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_doc[node0] test/test_parser/test_parser_tree.py::TestsFunctionAndLambdaParsing::test_doc[node1]
jedi/parser/tree.py AUTHORS.txt jedi/api/classes.py
jedi/parser/tree.py AUTHORS.txt jedi/api/classes.py